VC++写的DLL, 给了一个VB的例程, 转成 Delphi 代码总是出错
DLL是VC++写的,没有源码。
别人给了一个VB的例程,如下:
Public Declare Function u_E555_CheckPsw Lib "HTReader.dll " (ComData As COMDATA, ByVal btMode As Byte, ByRef btPsw As Byte) As Integer
COMDATA的类型定义:
Type COMDATA
sComPort As Integer
sDevID As Integer
ucReturn(0 To 23) As Byte
End Type
btPsw的声明: Dim btPsw(0 to 3) as Byte
转成了Delphi代码后是这样:
Function u_E555_CheckPsw(ComDat: PComData; btMode: integer; btPsw: Pointer): Integer; stdcall; External 'HTReader.dll ';
COMDATA的定义:
PComData = ^TCOMDATA;
TCOMDATA = packed record
sComPort: short;
sDevID: short;
ucReturn: array [0..23] of byte;
End;
btPsw: array [0..3] of byte;
在执行给函数的时候也不报错,但就是返回的值不对。一直找不到原因
[解决办法]
Function u_E555_CheckPsw(var ComDat: TComData; btMode: integer; var btPsw: array[0..3] of byte): Integer; stdcall; External 'HTReader.dll ';
[解决办法]
哈哈,,,,,,,,,,,,,,,,,,VB才菜,还停留在16机的水平.
32位器的INT默认都是4字节,连linux的GCC也是如此
[解决办法]
抱歉了。:)
[解决办法]
回复人:superyys(无血野人) ( 五级(中级)) 信誉:9 2007-01-28 10:29:46 得分:0
?
哈哈,,,,,,,,,,,,,,,,,,VB才菜,还停留在16机的水平.
32位器的INT默认都是4字节,连linux的GCC也是如此
================================================
VB的三十二位是Long,和Delphi中的Integer相同。