请教各位大哥,在 C 语言中表示的结构,在 DELPHI 中怎么表示?谢谢! |
尚未結案
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
请教大哥:
在 C 语言中有:
Public Const DATA_MAX = 100 typedef struct _COMDATA{
unsigned char ComPort;
unsigned char Address;
unsigned char ReData[DATA_MAX];
}COMDATA; 在 DELPHI 中怎么表示啊? 我这样表示,是不是写错了啊? const
DATA_MAX = 100;
type
COMDATA=packed record
comport:byte;
Address:byte;
ReData:array[0..DATA_MAX-1] of byte;
end; 还是这样表示:
const
DATA_MAX = 100;
type
COMDATA=packed record
comport:char;
Address:char;
ReData:array[0..DATA_MAX-1] of char;
end; 是哪一种表示方法啊?还是两种都写错了呢? 谢谢 各位大哥^_^!
|
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
非常感谢 yyu10 大哥:
还向 yyu10 大哥帮我看看下面两个问题: 请先看 原 函数在 C 语言中的声明: VC声明:
short u_PCSaleCoin(COMDATA &comdata, BCD card, MONEY &coin) //这是一个购币的函数
输入参数:
COMDATA结构 :
ComPort 通信串口号 1 - 255
Address 设备地址 0 - 255
ReData 函数输出值 (100 Bytes)
BCD结构 :
Value 用户卡号 (8 Bytes 十六进制字符 “00000000” - “FFFFFFFF”)
MONEY结构 :
Value 硬币数 (8 Bytes “00000000” - “16777215” 单位:分)
函数返回值:
000: 通信成功。
242: 命令执行出错,返回错误代码。
160: 硬件返回系统错误。
其它: 通信失败,具体返回值含义请参阅返回值代码表
函数描述:
PC销售硬币。
输出值格式(函数执行成功):
“33” typedef struct _COMDATA{
unsigned char ComPort;
unsigned char Address;
unsigned char ReData[DATA_MAX];
}COMDATA; typedef struct _BCD{
unsigned char Value[8];
}BCD; typedef struct _MONEY{
unsigned char Value[8];
}MONEY; 我 在delphi 中把它写为:
const
DATA_MAX = 100;
type
COMDATA=packed record
comport:byte;
Address:byte;
ReData:array[0..DATA_MAX-1] of byte;
end; type
BCD=packed record
Value:array[0..7] of byte;
end; type
MONEY=packed record
Value:array[0..7] of byte;
end;
问题1:
s[i 1]:=IntToStr(a[i])[1]; 中的 [1] 是什么意思啊? 问题2: 假设 卡号 为:AABBC124 通过:edit1 输入 购买 币数(游戏机币) 为:5 个 通过 edit2 输入 现在我的问题是: procedure TForm1.Button6Click(Sender: TObject); // var com:COMDATA;
card:BCD;
coin:MONEY;
i:integer;
s:string;
begin
com.comport:=1;
com.Address:=0;
s:=edit1.text;
move(s[1],card[0],length(s));
可是 现在买 5 个币,但是 coin 的长度为 8
这要怎么处理呢?
u_PCSaleCoin(com,card,coin);//调用是这样的吗? end; 谢谢 yyu10 大哥大哥
|
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
lsh998, 你好,
引言: 问题1: s[i 1]:=IntToStr(a[i])[1]; 中的 [1] 是什么意思啊?IntToStr(a[i]) 返回一个string. IntToStr(a[i])[1] 是这个string的第一个字符, 如'ABC'中的'A'. 引言: 可是 现在买 5 个币,但是 coin 的长度为 8 这要怎么处理呢?这要看u_PCSaleCoin如何使用coin了. 可能作为string使用, 也可能作为integer使用. Delphi区分这两种类型, 而C并不严格区分它们, 比如 char c = 65, 所以仅仅从Money结构的定义不能确定其真实类型. 你最好能提供C中使用u_PCSaleCoin的范例, 或者u_PCSaleCoin的C代码. 引言: u_PCSaleCoin(com,card,coin);//调用是这样的吗?可以. 使用前加上 funtion u_PCSaleCoin(var comdata: COMDATA; card: BCD; var coin:MONEY):SmallInt; stdcall; external 'xxx.dll'; _________________________ Programming is a passion |
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
yyu10 大哥:
您好! 在 C 语言中的 MONEY 结构如下: typedef struct _MONEY{
unsigned char Value[8];
}MONEY; 在 DELPHI 中把它表示为:
type
MONEY=packed record
Value:array[0..7] of byte;
end; 请教:
yyu10 大哥,byte 类型,我不是很理解
请问 yyu10 大哥,byte 类型,是不是只能由 0 和 1 的
字符组成。array[0]:=2 行吗?
请给我解释一下 byte 类型,好吗? 还有一个问题:
可是 现在买 5 个币,但是 coin 的长度为 8
这要怎么处理呢? 我把 u_PCSaleCoin C 的原码付上来了,请 yyu10 大哥 再给我看看: short WINAPI u_PCSaleCoin(COMDATA &comdata, BCD &card, MONEY &coin)
{
return u_GSHW.HW_PCSaleCoin(comdata,card,coin);
} short CGSCtrl::HW_PCSaleCoin(COMDATA &comdata, BCD &card, MONEY &coin)
{
unsigned char T_Dat[DATA_MAX] = {0};
unsigned char nCmd = PCSALECOIN;
unsigned short nNum = 7;
short sRt = 0,sRt1 = 0;
unsigned char ucMoney[9] = {0}; memset(&comdata.ReData,0,DATA_MAX);
m_ucComPort = comdata.ComPort;
m_ucID = comdata.Address; //Check the parameter
if(!IsHexNum(card.Value,8)) return INVALID;
if(!IsDecNum(coin.Value,8)) return INVALID;
//Proccess the card NO.
for(int i = 0;i < 4;i )
{
T_Dat[i] = CHRTOBCD(card.Value,i * 2);
} //Coin
memcpy(ucMoney,coin.Value,8);
if(atoi((char *)ucMoney) < 0 || atoi((char *)ucMoney) > 0xffffff) return INVALID;
T_Dat[4] = (atoi((char *)ucMoney) & 0xff0000) >> 16;
T_Dat[5] = (atoi((char *)ucMoney) & 0xff00) >> 8;
T_Dat[6] = atoi((char *)ucMoney) & 0xff; sRt = ProcessData(&nCmd,T_Dat,&nNum);
if(sRt != SUCCESS) return sRt; if((sRt1 = ProcessCmd(comdata.ReData,T_Dat,nCmd)) != SUCCESS) return sRt1;
return sRt;
} 谢谢 yyu10 大哥!
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
引言: byte 类型,是不是只能由 0 和 1 的字符组成。array[0]:=2 行吗?在Delphi中, byte是一个integral type, 取值范围:0..255. 在Delphi Help里直接查byte看看. 引言: 可是 现在买 5 个币,但是 coin 的长度为 8 这要怎么处理呢?在u_PCSaleCoin中, BCD和MONEY实际上是作为字串使用的, 所以在Delphi中相应结构用char更加方便些. type BCD=packed record Value:array[0..7] of char; end; MONEY=packed record Value:array[0..7] of char; end;读取卡号和币数 var ... i: integer; s:string; begin ... s := Trim(edit1.Text); i := Min(Length(s), SizeOf(card)); Move(s[1], card, i); ... ... s := Trim(eidt2.Text); if Lengh(s) > SizeOf(coin) then begin //显示错误 end else begin if Lengh(s) < SizeOf(coin) then FillChar(coin, SizeOf(coin), ' '); //' ' -> 一个空格 i := SizeOf(coin)-Length(s); Move(s[1], coin.Value[i], Length(s)); end; ... ... u_PCSaleCoin(com,card,coin); ... end;_________________________ Programming is a passion |
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |