有段代码,是c++builder 做的。具体是调用一.dll文件的定义。
我想把他转为delphi 定义,该如何做,请高手帮忙。
typedef void* __stdcall (OPENDEVICE)(int nMyAddress, HWND hWnd);
typedef void __stdcall (RECVEDITION)(LPTSTR lpEdition);
typedef BOOL __stdcall (CONNECT)(void* pDevice, LPCTSTR lpCommDef);
typedef void __stdcall (SETADDLOG)(void* pDevice, BOOL bAddLog);
typedef void __stdcall (SETINNERCODE)(void* pDevice, BOOL bBig5);
typedef void __stdcall (SETINNERCMD)(void* pDevice, BOOL bInner);
typedef void __stdcall (SETCOMMKEY)(void* pDevice, LPCTSTR lpCommKey);
typedef void __stdcall (SETWAITTIME)(void* pDevice, DWORD dwWaitTime);
typedef void* __stdcall (STARTICDMCMD)(void* pDevice, int nAddress, int nCommand,
 void* pParameters = NULL, int nSizeOfParameter = 0);
typedef int __stdcall (GETSIZEOFDATA)(void* pCommand);
typedef BOOL __stdcall (GETDATA)(void* pCommand, void* pDataBuffer, int nSize);
typedef int __stdcall (GETCMDRESULT)(void* pCommand);
typedef void __stdcall (ENDICDMCMD)(void* pCommand);
typedef BOOL __stdcall (DISCONNECT)(void* pDevice);
typedef void __stdcall (CLOSEDEVICE)(void* pDevice);
typedef void __stdcall (SETMYADDRESS)(void* pDevice, int nAddress);        typedef void __stdcall (SENDFRAME)(void* pDevice, LPCTSTR lpSendFrm);
typedef void __stdcall (CLEARRECVSTR)(void* pDevice);
typedef BOOL __stdcall (RECVSTREAM)(void* pDevice, LPTSTR lpRecvStr);
typedef BOOL __stdcall (RECVHDLC)(void* pDevice, LPTSTR lpRecvStr);
      SENDFRAME* lpSendFrame;
CLEARRECVSTR* lpClearRecvStr;
RECVSTREAM* lpRecvStream;
RECVHDLC* lpRecvHDLC;    OPENDEVICE* lpOpenDevice;
    RECVEDITION* lpRecvEdition;
    CONNECT* lpConnect;
    SETADDLOG* lpSetAddLog;
    SETINNERCODE* lpSetInnerCode;
    SETINNERCMD* lpSetInnerCmd;
    SETWAITTIME* lpSetWaitTime;
    SETCOMMKEY* lpSetCommKey;
STARTICDMCMD* lpStartICDMCmd;
GETSIZEOFDATA* lpGetSizeOfData;
GETDATA* lpGetData;
GETCMDRESULT* lpGetCmdResult;
ENDICDMCMD* lpEndICDMCmd;
DISCONNECT* lpDisConnect;
CLOSEDEVICE* lpCloseDevice;
SETMYADDRESS* lpSetMyAddress

解决方案 »

  1.   

    type
            OPENDEVICE=function(nMyAddress:integer;AhWnd:HWND):Pointer;stdcall;
    RECVEDITION=procedure(lpEdition:LPTSTR );stdcall;
    CONNECT=function( pDevice:pointer; lpCommDef:LPCTSTR) :BOOL;stdcall;
    SETADDLOG=procedure(pDevice:pointer;bAddLog:BOOL);stdcall;
    SETINNERCODE=procedure(pDevice:pointer;bBig5:BOOL);stdcall;
    SETINNERCMD=procedure(pDevice:pointer; bInner:BOOL);stdcall;
    SETCOMMKEY=procedure(pDevice:pointer; lpCommKey:LPCTSTR );stdcall;
    SETWAITTIME=procedure( pDevice:pointer;dwWaitTime:DWORD);stdcall;
            STARTICDMCMD=function(pDevice:pointer;nAddress,nCommand:integer;
      pParameters:pointer = NiL;nSizeOfParameter:integer = 0):pointer; stdcall;
    GETSIZEOFDATA=function(pCommand:pointer):integer;stdcall;
    GETDATA=function(pCommand,pDataBuffer:pointer;nSize:integer):BOOL;stdcall;
            GETCMDRESULT=function(pCommand:pointer):integer;stdcall;
    ENDICDMCMD=procedure( pCommand:pointer); stdcall;
    DISCONNECT=function(pDevice:pointer):BOOL; stdcall;
            CLOSEDEVICE=procedure(pDevice:pointer); stdcall;
    SETMYADDRESS=procedure(pDevice:pointer; nAddress:integer);stdcall;        SENDFRAME=procedure(pDevice:pointer; lpSendFrm:LPCTSTR );stdcall;
    CLEARRECVSTR=procedure(pDevice:pointer);stdcall;
            RECVSTREAM=function(pDevice:pointer; lpRecvStr:LPTSTR ):BOOL;stdcall;
    RECVHDLC=function(pDevice:pointer;lpRecvStr:LPTSTR):BOOL; stdcall;
          var
            lpSendFrame:SENDFRAME;
    lpClearRecvStr:CLEARRECVSTR;
    lpRecvStream:RECVSTREAM;
    lpRecvHDLC:RECVHDLC;
       ...........
      

  2.   

    Hwnd      THandle? 
    LPCTSTR,  从字面上看好像是一种字符串的长指针, PChar?
    DWORD  是否在types 单元?(我在网吧无法查证)
      

  3.   

    我想把他单独写在一个.pas文件里面,,让程序掉用该如何写?
      

  4.   

    先感谢各位,
    c++是这样调用的 pDllCall->hLibrary = ::LoadLibrary("dll4K.dll");
    我在delphi 里面该如何写,调用dll4k.dll.
      

  5.   

    pDllCall.hLibrary=Loadlibrary('dll4k.dll');