访问dll中的例程,有两种方式:静态引入方式和动态引入方式。
静态方式:在单元的interface部分用external列出要从dll中引入的例程。
动态方式:调用windows的api函数LoadLibrary(LoadLibraryEx),GetProceAddress,FreeLibrary
例如:
如果你调用DLLName.dll 中一个名为functionName的函数,可以这样写:
type
TFunctionName=function(参数列表):返回类型;stdcall;procedure TForm1.Button1Click(Sender:TObject);
var
LibHandle:THandle;
FunctionName=TFunctionName;
begin
LibHandle:=LoadLibrary('DLLName.dll');
try
if LibHandle=0 then
raise Exception.create('unable to load dll');
@FunctionName:=GetProcAddress(LibHandle,'FunctionName');
if not (@FunctionName=nil) then
.....
else
.....
finally
FreeLibrary(LibHandle);
end;
end;
静态方式:在单元的interface部分用external列出要从dll中引入的例程。
动态方式:调用windows的api函数LoadLibrary(LoadLibraryEx),GetProceAddress,FreeLibrary
例如:
如果你调用DLLName.dll 中一个名为functionName的函数,可以这样写:
type
TFunctionName=function(参数列表):返回类型;stdcall;procedure TForm1.Button1Click(Sender:TObject);
var
LibHandle:THandle;
FunctionName=TFunctionName;
begin
LibHandle:=LoadLibrary('DLLName.dll');
try
if LibHandle=0 then
raise Exception.create('unable to load dll');
@FunctionName:=GetProcAddress(LibHandle,'FunctionName');
if not (@FunctionName=nil) then
.....
else
.....
finally
FreeLibrary(LibHandle);
end;
end;
解决方案 »
- 赌博 把分全输光了 现在问一个有难度的问题
- 热烈庆祝第一个DELPHI节!(散分)
- 请教:用UltraEdit修改exe文件问题
- 数据库的问题,十万火急!!!
- 怎么让delphi7支持png格式哦
- 怎么使用delp制作自适应窗体?
- 如何将stringgrid控件中的某几列隐藏?
- 随意读写xml值的源代码,谁有? 谢谢
- cnpack小组控件大调查,来者有分. (怕各位嫌分不够,故多加一贴.)
- 求助 那位同志有关于InterBase编程方面的资料可否来一份,[email protected]
- 为什么用Delphi6在Windows2000下开发的程序在Windows me下运行按钮变大???
- 请问我如何得到某个进程的句柄,并向它发送消息?我知道有个findwindow,但那是根据caption来找,有没有别的方法?
如function IsWindow(hWnd: HWND): BOOL; stdcall; external 'user32.dll;
在程序启动时调用该dll,缺点是调用失败,程序就不能运行
而动态调用就没有这个缺点
如
type
TIsWindow=function (hWnd:HWND): BOOL; stdcall;
IsWindow:TIsWindow;
hModule:=LoadLibrary("user32.dll")
@IsWindow:=GetProcAddress(hModule,'IsWindow');
这样就可以调用,可以根据hModule的值来判断dll是否装载成功