delphi调用动态链接库的问题(100)

  • 主题发起人 主题发起人 chrysalis
  • 开始时间 开始时间
C

chrysalis

Unregistered / Unconfirmed
GUEST, unregistred user!
C++里的原函数是这样bool SAAT_COMInit(void** pHandle,unsigned char nBusAddr,char *pComNum, int nBaud )而我用delphi调用的时候代码如下function SAAT_COMInit(I:pHandle;nBusAddr:Char;pComNum:char;nBaud:Integer):integer;stdcall;external 'RFIDAPI.dll';调用的时候“提示无法定位程序输入点SAAT_COMInit于动态链接库RFIDAPI.DLL上“请问如何解决!
 
试试这个:function SAAT_COMInit(var pHandle;nBusAddr:Char;pComNum:char;nBaud:Integer):integer;stdcall;external 'RFIDAPI.dll';
 
看样了不是函数定义有问题而是在动态链接库中找到名为SAAT_COMInit的函数看一下,C++程序的导出设置
 
dll中有没有EXPORTS函数
 
C++的DLL区分函数名称大小写?
 
那是因为你的函数声明有问题function SAAT_COMInit(pHandle:PPointer;nBusAddr:Byte;pComNum:PChar;nBaud:Integer):Boolean;stdcall;external 'RFIDAPI.dll';
 
对不起大家,Delphi调用的书写都是正确了,是厂家给我的DLL和说明的版本错了,DLL里根本就没有SAAT_COMInit这个函数。现在给了正确的DLL后出现这个问题;问题如下。函数原型: bool SAAT_COMInit(void** pHandle,unsigned char nBusAddr,char *pComNum, int nBaud ) 传入参数: pHandle 为保存打开的端口句柄 nBusAddr 为总线地址 pComNum 打开的 COM 口端口号 nBaud 串口通讯速率 返回值:true:操作成功;false:操作失败。delphi里调用procedure TfrmMain.Button2Click(Sender: TObject);Type TF=Function(I:PHandle;nBusAddr:String;pComNum:String;nBaud:Integer):bool;stdcall;var mHandle:THandle; pComNum : array [0..MAX_COMPUTERNAME_LENGTH+1] of char; nBusAddr: char; //总线地址?何数? aptr:TFarproc; mTF:TF;begin mHandle:=LoadLibrary('RFIDAPI.Dll'); Aptr:=GetProcAddress(mHandle,'SAAT_COMInit'); if Aptr<>nil then begin mTF:=TF(Aptr); StrPCopy(@pComNum,Combobox1.Text); //设置pComNum的值 try if mTF(@mHandle,nBusAddr,'Com'+pComNum[0],9600) then begin Memo1.Lines.Add('串口初始化成功... ...'); end else begin Memo1.Lines.Add('串口初始化失败... ...'); end; Finally FreeLibrary(mHandle); end; end;end;无论是选择串口几都是成功的... ...
 
参数不正确,另一个帖子里说了。你把动态库的句柄或者函数的地址传入了,当然不正确。
 
“提示无法定位程序输入点SAAT_COMInit于动态链接库RFIDAPI.DLL上“这句话基本上就是说没有SAAT_COMInit函数了,如果不放心,可以用某些工具查看DLL中有哪些函数,比如VC6.0中的dumpbin.exe
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部