如何调用DLL里的函数,解释? ( 积分: 30 )

  • 主题发起人 xiaohedou
  • 开始时间
X

xiaohedou

Unregistered / Unconfirmed
GUEST, unregistred user!
一个工程文件包含;两个a.pas,b.pas。
b是一个unit,写了全部的DLL调用,如此:
function InitSystem(nMode:Byte ):Byte;stdcall;
external 'abc.dll';
function FreeSystem:Byte;
stdcall;
external 'abc.dll';
a.pas 里调用时 uses b.问题是a看不到b里定义的所有原形,说没定义?为什么?
 
一个工程文件包含;两个a.pas,b.pas。
b是一个unit,写了全部的DLL调用,如此:
function InitSystem(nMode:Byte ):Byte;stdcall;
external 'abc.dll';
function FreeSystem:Byte;
stdcall;
external 'abc.dll';
a.pas 里调用时 uses b.问题是a看不到b里定义的所有原形,说没定义?为什么?
 
interface
function InitSystem(nMode:Byte ):Byte;stdcall;
external 'abc.dll';
function FreeSystem:Byte;
stdcall;
external 'abc.dll';
implementation
 
关键是这里:声明已经对了
a.pas 里调用时 uses b.问题是a看不到b里定义的所有原形,说没定义?为什么?
 
动态调用的方法.
procedure MyProcedure;
var
DllHand:THandle;
fCxUnFilePack: function (AFileName:string):pChar ;stdcall;
DllFile:String;
begin
DllFile:='DllFileName';
if FileExists(DllFile) then
begin
DllHand := loadlibrary(pchar(DllFile));
//LoadÒ»¸öDll,°´ÎļþÃûÕÒ¡£
fCxUnFilePack:=GetProcAddress(DllHand,'CxFileUnPacked');
try
if Assigned(fCxUnFilePack) then
fCxUnFilePack('参数');//调用DLL方法
finally
FreeLibrary(DllHand);//
end;
end;
end;
 
我在implementation后边加initialization就OK了!
为什么呢?
 
没有答案,结了!~
 
顶部