听有“动态加载”一说,是什么意思啊?如果有Delphi的源代码,那就太好了。
没有什么目的,纯粹是想学习,搞清楚。

解决方案 »

  1.   

    动态加载可以通过对操作系统(OS)中库函数的直接调用来实现对库中例程的访问,操作系统库函数包括LoadLibrary、FreeLibrary和GetProcAddress。在Windows中,这三个函数声明在Windows.pas中;在Linux中,为了跨平台兼容,它们在SysUtils.pas中被实现;实际的Linux操作系统例程是dlopen、dlclose和dlsym(所有的声明在Kylix的Libc单元中;更多的相关信息见man页)。这时,可以使用程序型类型的变量来引用引入的例程。例如,在Windows或Linux中,uses Windows, ...; { 对于Linux,应用SysUtils代替Windows }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('libraryname');  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;通过这种方法引入例程使,库直到含有调用LoadLibrary的代码执行时才被加载。该库后来通过调用FreeLibrary被卸载。当程序使用的库不必在内存中继续存在时,这种动态加载的方式就可以保持内存和运行程序。