DLL中有函数int Login(unsigned char ucLoginMode, char cFlag);返回成功后的Socket描述符tSocket Login成功后使用int SendActiveTest(int tSocket);函数发送链路检测信号;
我用以下声明:
function Login(ucLoginMode:byte;cFlag :byte ):integer; stdcall; external 'SpApiDLL.dll';
function SendActiveTest(tSocket:integer):integer;stdcall; external 'SpApiDLL.dll'; 在运行时Login正常返回Socket值,但SendActiveTest(Login(0,1))后返回发送连接测试包失败的错误码
同样的方式在VB下运行正常。 百思不得其解!使用所有的Int型进行了测试,还是不行!都快郁闷死了……
也不知道大家有没有遇到这种情况的?
我用以下声明:
function Login(ucLoginMode:byte;cFlag :byte ):integer; stdcall; external 'SpApiDLL.dll';
function SendActiveTest(tSocket:integer):integer;stdcall; external 'SpApiDLL.dll'; 在运行时Login正常返回Socket值,但SendActiveTest(Login(0,1))后返回发送连接测试包失败的错误码
同样的方式在VB下运行正常。 百思不得其解!使用所有的Int型进行了测试,还是不行!都快郁闷死了……
也不知道大家有没有遇到这种情况的?
函数的声明要跟dll中的类型一致
delphi 中的数据类型要求比较严格,vb有时候可以在类型上兼容,但delphi 不行。
请详细检查数据类型是否一致。
iSocket: Integer;
begin
iSocket := Login(0, 1);
if iSocket > 0 then SendActiveTest(iSocket);
end;
这种方式效果一样的。
你试着编译一下delphi程序,看能否通过,如果通过就说明dll有问题
错误也不是出在DLL中,是VC写的DLL和Delphi的变量类型不匹配上,但现在拿不到DLL的源代码,只能让Delphi适应DLL
而VB和VC同出一门,在变量的内存占用形式上一致,所以能通过!
唉!难不成让我再去学VB?
在接下来的开发中又遇到了一个问题,用DELPHI来作SOAP开发,也是调用后返回值异常,同样的参数通过C#
传入就没任何问题,不得不改用idHTTP来继续,郁闷呀!
唉!难道delphi的时代已经过去了?
难不成真得放弃delphi?无奈,结贴中……