读书人

VC++写的DLL 给了一个VB的例程 转

发布时间: 2012-02-09 18:22:27 作者: rapoo

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相同。

读书人网 >.NET

热点推荐