在DELPHI里怎样调用C语言写的DLL里面的函数? (100分)

  • 主题发起人 主题发起人 sms
  • 开始时间 开始时间
S

sms

Unregistered / Unconfirmed
GUEST, unregistred user!
DLL函数原型如下:
BOOL WINAPI IFInitInterface(DWORD dwCodeProtocol,//编码协议
DWORD dwDriverProtocol,//通讯协议
LPCTSTR pDriverParam//通讯参数);
在DELPHI这样调用:
var
Form1: TForm1;
hdll:Thandle;
IFInitInterface:function(dwCodeProtocol:dword;dwDriverProtocol:dword;pDriverPara:string):boolean;
…………
procedure TForm1.btnInitialClick(Sender: TObject);
begin
hdll:=loadLibrary('smeidll.dll');
if hdll>32 then
@IFInitInterface:=GetProcAddress(hdll,'IFInitInterface');
if IFInitInterface(5,1,'211.139.140.200 7890 5000') then
showmessage('接口初始化成功')
else
showmessage('接口初始化失败');
end
这种调用方法有没有错?请高手指点,各方面的参数是正确的,总是显示'接口初始化失败'
在C里面用同样的参数就不会,怎么回事?
 
使用静态调用呢?声明部分添加上stdcall
 
上面老兄有道理,静态调用行,可是为什么动态就不行呢?
 
声明部分添要加上stdcall(函数调用的约定方式)
如是动态引入方式要用到几个API:LoadLibraryEx(用于加载DLL,并返回句柄)、
GetProcAddress(获得DLL中例程的地址)
........
.......
if IFInitInterface(5,1,'211.139.140.200 7890 5000') then
showmessage('接口初始化成功')
else
Raise Exception.Creat('接口初始化失败,错误代码:'+IntToStr(GetLastError));
//看一下错误代码是什么,再进行下一步判断!

end
 
多人接受答案了。
 
后退
顶部