c to pascal的转换数据类型的问题
c中函数原形:
WORD MCS_AutoTest(
BYTE *_bCardType
);
我用dll静态调用,声明如下函数:
function MCS_AutoTest(var _bCardType : pchar ):WORD;stdcall;external'MCS_SR.dll';
1 这样声明 参数类型不知对否?还有没有更好的方法?
2 如果函数调用成功_bCardType指向的是数字,
那我如何把它赋值给integer类型的变量呢?
我的方法:
var
bb,ReadData,ee:pchar;
begin
GetMem(bb,1);
myresult:=MCS_AutoTest(bb);//调用MCS_AutoTest函数,
cc:=StrToInt(bb^); //这里有时运行时出错,有时没错,
还没睡,明天不用开工啊
WORD MCS_AutoTest(
BYTE *_bCardType
);
function MCS_AutoTest(_bCardType: PByte): Word;
指针可以是Pointer,也可以是PChar,但一般我们转时,一般转对应的,如
BYTE * ==> PByte;
char * ==> PChar;
int * ==> PInteger;
当然也可以是:var b: Byte; var c: char; var i: Integer;
但有时C里面的指针是数组来的,所以用var不太好,建立用PDataType这种,如果不知的话,可以声明为Pointer类型。
2:
var
W: Word;
C: PChar;
begin
GetMem(C, 1);
try
W := MSC_AutoText(C);
ShowMessage(W);
ShowMessage(IntToStr(PByte(C)^));
ShowMessage(IntToStr(PInteger(C)^));
finally
FreeMem(C);
end;
end;
3:别再问我为什么了,我也不知道为什么这样写,大概delphi就是这样写的吧。
第一个问题可以使用LoadLibray也可以具体看Api;
第二个问题bb就是一个bb的值可能是字符比如'a'不是'1',于是有时候是出错,有时候不出错.另外,就是Delphi指针有时候不分的(看看Pchar的定义就可以)
代码如下写:"cc := StrToInt(bb)"也是一样;