我想把一个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调用约定错
怎么办啊,各位老大帮忙啊!!!!,

解决方案 »

  1.   

    Declare Function GetUDTComPar Lib "MEMCOMM.dll" (pComdrv As TComdrvInt) As Long
    试试写成:
    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
    ...参数倒是传过,结构体没有传过不是很确定。。
      

  2.   

    Private Declare Function GetUDTComPar Lib "MEMCOMM.dll" (byval pComdrv As TComdrvInt) As Long
      

  3.   

    function GetUDTComPar(PComdrv: TComdrvInt):longint;StdCall;export;传不进去的。你要用指针的。
    function GetUDTComPar(PComdrv: ^TComdrvInt):longint;StdCall;export;
    才能取出PCondrv值,还有调用约定,你DELPHI为stdcall ,VB要不要定义为stdcall?(VB没用过)
      

  4.   

    GetUDTComPar FComDrvStr   此处出错 FComDrvStr 要把它地址传进去应该就可以了。
      

  5.   

    在 Delphi 中定义为:
    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 函数取变量地址, 若不是则用相应的函数替换上去.