一个Delphi5中调用CB5编写的Dll时参数传递的问题(急!)(100分)

  • 主题发起人 主题发起人 ebeggar
  • 开始时间 开始时间
E

ebeggar

Unregistered / Unconfirmed
GUEST, unregistred user!
我在CB5编写的Dll中定义了如下一个函数:
DWORD __stdcall SendPackage(HANDLE hCom, Byte* DataPackage, int iDataPNum,
int iDcuID, Byte bytCommand)
Delphi5中定义该函数为:
function SendPackage(hCom: HWND;
Buf: array of byte;
iBytenum,idcuid: Byte;
bytCommand: Byte): DWORD;
stdcall;

调用方法为:
var
Buf: array of Byte;
iR: DWORD;
begin
//
SetLength(Buf,8);
... //此处给Buf赋值
iR := SendPackage(hCom,Buf,8,2,$62);
...
end;

出现的问题是:
到了CB5的Dll中,iDataPNum=7(应该为8),iDcuID=8(应该为2),bytCommand=2(应该为0x62),
也就是参数不对应,后移了一个位置!
请问各位富翁,是什么原因造成的呢?
 
55,怎么没人回答啊,是不是分不够?不够再加哦
 
是D5中此参数的问题,Buf: array of byte,应使用:
SetLength(Buf,8);
Buf[0] := ...
...
new(BufTemp);
BufTemp^ := Buf;
iR := SendPackage(hCom,BufTemp,8,2,$62);
其中:
Type
Temp = array of byte;
TByte = ^Temp;
Var
Buf: T;
BufTemp: TByte;
参数是传对了,但在CB5中使用DataPackage[0],DataPackage[1]等取不到正确的数!
 
友梅工作室!
我的方法!
function SendPackage(hCom: HWND;
Buf: array of byte;
iBytenum,idcuid: Byte;
bytCommand: Byte): DWORD;
stdcall;
调用方法为:
var
Buf: array of Byte;
iR: DWORD;
begin
//
GetMem(Buf,8);
... //此处给Buf赋值
iR := SendPackage(hCom,^Buf,8,2,$62);
...
end;
第二个方法!
type P_Buf = ^Byte;
function SendPackage(hCom: HWND;
Buf: P_Buf;
iBytenum,idcuid: Byte;
bytCommand: Byte): DWORD;
stdcall;
var
Buf: array of Byte;
iR: DWORD;
begin
//
GetMem(Buf,8);
... //此处给Buf赋值
iR := SendPackage(hCom,^Buf,8,2,$62);
...
end;
 
这个问题放在好久了,今天才发现没有关闭!
谢谢dafuweng2003,后来我用别的方法替换了,以后再试试你说的办法,再次thanks!
 
后退
顶部