DLL初级问题(50分)

  • 主题发起人 主题发起人 光华
  • 开始时间 开始时间

光华

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序运行中使用DLL(不是程序开始时),运行DLL中的语句或命令
 
用LoadLibrary装载DLL,用GetProcAddress取函数地址运行,用FreeLibrary释放DLL。
 
真够初级的:)
 
可以有详细点的例子吗?
 
还可以静态调用,external
 
delphi2.0 高级程序设计指南上有一章专讲dll的
此书大约3M,到处都有载的,去搜索引擎找吧
 
搜了一篇垃圾,没事看看。

***********************************************************************
动态装入DLL,要用到Windows的三个API函数。Loadlibrary、Freelibrary和GetprocAddress 。loadlibrary函数
用来装入DLL库,其调用格式如下:

function loadlobrary (DLLfileName:Pchar): THandle:

当不再需要一个DLL库时,应调用FreeLibrary函数将其释放,以空出宝贵的内存资源,其调用格式如下:

procedure FreeLibrary (Libmodule:THandle)

Libmodule 为由LoadLibrary调用得到的DLL库句柄。在用loadlobrary 函数装入某个DLL库和调用FreeLibrary
释放该DLL库之间的程序段中, 可以使用该DLL库中的过程和函数,具体使用方法是:用GetprocAddress函数把
DLL库中函数的地址传递给程序中某个函数变量,再用该变量实现DLL函数的调用。GetprocAddress函数声名如下,

function GetprocAddress (Libmodule:THandle:procname:pchar):TFarProc:

 

如下例所示:

type

TTimeRec = record

Second: Integer;

Minute: Integer;

Hour: Integer;

end;

TGetTime = procedure(var Time: TTimeRec);

THandle = Integer;

var

Time: TTimeRec;

Handle: THandle;

GetTime: TGetTime;

...

begin

Handle := LoadLibrary('DATETIME.DLL');

if Handle <> 0 then

begin

@GetTime := GetProcAddress(Handle, 'GetTime');

if @GetTime <> nil then

begin

GetTime(Time);

with Time do

WriteLn('The time is ', Hour, ':', Minute, ':', Second);

end;

FreeLibrary(Handle);

end;

end;

在调用动态链接库时应注意, 所需动态链接库须与应用程序在同一目录或Windows System 目录下。

动态链接库是 Windows下程序组织的一种重要方式,使用动态链接库可以极大地保护用户在不同开发工具、
不同时期所做的工作,提高编程效率。
************************************************************************
 
接受答案了.
 
我是个初学者,请问怎样知道 'DATETIME.DLL' 动态链接库里有些什么函数?
怎样知道别人编的DLL里有些什么函数?
 
后退
顶部