我想把一个VB中定义的结构传递到DELHPI 的动态库中
我VB 下的程序是
模块中
Declare Function GetUDTComPar Lib "MEMCOMM.dll" (pComdrv As TComdrvInt) As Long
Public Type TComdrvInt
FComPortHandle As Long
FComPort As Long
FComPortBaudRate As Long
FComPortDataBits As Long
FComPortStopBits As Long
FComPortParity As Long
End Type
Global FComDrvStr As TComdrvInt
窗体中
Private Sub Command10_Click()FComDrvStr.FComPort = 1
FComDrvStr.FComPortBaudRate = 9600
FComDrvStr.FComPortDataBits = 8
FComDrvStr.FComPortHandle = 12345
FComDrvStr.FComPortParity = 0
FComDrvStr.FComPortStopBits = 1
GetUDTComPar FComDrvStr 此处出错End SubDELPHI中的代码是Type TComdrvInt=record
FComPortHandle : Longint;
FComPort : Longint ;
FComPortBaudRate : Longint ;
FComPortDataBits : Longint ;
FComPortStopBits : Longint ;
FComPortParity : Longint ;
End;var
ComParStr :TComdrvInt;function GetUDTComPar(PComdrv: TComdrvInt):longint;StdCall;export;
var
Temp:longint;
Temp1:longint;
Temp2:longint;
Temp3:longint;
Temp4:longint;
Temp5:longint;begin
With ComParStr do
begin
Temp:= FComPortHandle;
Temp1:=FComPort;
Temp2:=FComPortBaudRate;
Temp3:=FComPortDataBits;
Temp4:= FComPortStopBits;
Temp5:=FComPortParity;
end;
end;
问题是在VB中调动态库时出错
错误提示是 实时错误 '49'
DLL调用约定错
怎么办啊,各位老大帮忙啊!!!!,
我VB 下的程序是
模块中
Declare Function GetUDTComPar Lib "MEMCOMM.dll" (pComdrv As TComdrvInt) As Long
Public Type TComdrvInt
FComPortHandle As Long
FComPort As Long
FComPortBaudRate As Long
FComPortDataBits As Long
FComPortStopBits As Long
FComPortParity As Long
End Type
Global FComDrvStr As TComdrvInt
窗体中
Private Sub Command10_Click()FComDrvStr.FComPort = 1
FComDrvStr.FComPortBaudRate = 9600
FComDrvStr.FComPortDataBits = 8
FComDrvStr.FComPortHandle = 12345
FComDrvStr.FComPortParity = 0
FComDrvStr.FComPortStopBits = 1
GetUDTComPar FComDrvStr 此处出错End SubDELPHI中的代码是Type TComdrvInt=record
FComPortHandle : Longint;
FComPort : Longint ;
FComPortBaudRate : Longint ;
FComPortDataBits : Longint ;
FComPortStopBits : Longint ;
FComPortParity : Longint ;
End;var
ComParStr :TComdrvInt;function GetUDTComPar(PComdrv: TComdrvInt):longint;StdCall;export;
var
Temp:longint;
Temp1:longint;
Temp2:longint;
Temp3:longint;
Temp4:longint;
Temp5:longint;begin
With ComParStr do
begin
Temp:= FComPortHandle;
Temp1:=FComPort;
Temp2:=FComPortBaudRate;
Temp3:=FComPortDataBits;
Temp4:= FComPortStopBits;
Temp5:=FComPortParity;
end;
end;
问题是在VB中调动态库时出错
错误提示是 实时错误 '49'
DLL调用约定错
怎么办啊,各位老大帮忙啊!!!!,
试试写成:
Declare Function GetUDTComPar Lib "MEMCOMM.dll" (byval pComdrv As TComdrvInt) As LongType TComdrvInt=record
FComPortHandle : Longint;
FComPort : Longint ;
FComPortBaudRate : Longint ;
FComPortDataBits : Longint ;
FComPortStopBits : Longint ;
FComPortParity : Longint ;
End;
试试写成:
Type TComdrvInt=packed record
...参数倒是传过,结构体没有传过不是很确定。。
function GetUDTComPar(PComdrv: ^TComdrvInt):longint;StdCall;export;
才能取出PCondrv值,还有调用约定,你DELPHI为stdcall ,VB要不要定义为stdcall?(VB没用过)
function GetUDTComPar(var PComdrv: TComdrvInt): Longint; stdcall;在 VB 中声明为:
Declare Function GetUDTComPar Lib "MEMCOMM.dll" Alias "GetUDTComPar" (pComdrv As Long) As Long调用方法:
GetUDTComPar(GetAddress(FComDrvStr))
在 VB 中不知道是否使用 GetAddress 函数取变量地址, 若不是则用相应的函数替换上去.