首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

VC++写的DLL, 给了一个VB的例程, 转成 Delphi 代码总是出错,该如何处理

2012-02-09 
VC++写的DLL, 给了一个VB的例程, 转成 Delphi 代码总是出错DLL是VC++写的,没有源码。别人给了一个VB的例程,

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

热点排行