我在CB下写了一个DLL,其中有一个函数,形式如下:
extern ULONG FAR PASCAL OpenDevice(ULONG Number, HANDLE *DeviceHandle, CARD_INFO *DeviceInfo)
其中:DeviceHandle和DeviceInfo是用来返回设备句柄和参数的。现在要在Delphi中调用这个函数,请问在Delphi中要怎样使用?

解决方案 »

  1.   

    建议将声明改成:
    extern "C" ULONG FAR __stdcall OpenDevice(ULONG Number, HANDLE *DeviceHandle, CARD_INFO *DeviceInfo);在Delphi 里静态链入该函数:
    function OpenDevice(ULONG Number, HANDLE *DeviceHandle, CARD_INFO *DeviceInfo)
    :Cardinal; stdcall; extern "Dll File Name";应该注意的问题是CB/VC编译的dll文件里的函数名有其一套确定规则而不是单纯的"OpenDevice”。具体可以参考帮助。
      

  2.   

    建议将声明改成:
    extern "C" ULONG FAR __stdcall OpenDevice(ULONG Number, HANDLE *DeviceHandle, CARD_INFO *DeviceInfo);在Delphi 里静态链入该函数:
    function OpenDevice(Number: Cardinal;
                        DeviceHandle: ^HANDLE;
                        DeviceInfo: ^CARD_INFO)
                        :Cardinal; stdcall; external 'Dll File Name';应该注意的问题是CB/VC编译的dll文件里的函数名有其一套确定规则而不是单纯的"OpenDevice”。具体可以参考帮助。
      

  3.   

    如楼上所说,申明时最好加“C”,调用处申明静态连接用楼上的就对了,external 后面建议接绝对路径,用动态加载的话 也就handle:=LoadLibrary('dll file name'),GetProcAddress('OpenDevice',handle);然后再根据静态连接的申明进行参数类型的匹配就好了