b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

pascal 视频教程_pascal和basic_pascal选择排序(98)

电脑杂谈  发布时间:2016-12-28 07:02:37  来源:网络整理

(这里是翻译为对象,还是目标呢?)

Calling dynamically loadable libraries(调用动态调入库) Calling dynamically loadable libraries(调用动态调入库)

你可以直接调用操作系统的例程,但它们直到运行时才被链接到你的程序。这说明在编译程序时它们不必存在,同时也说明在(试图)导入一个例程时不会进行编译时验证。

在调用由共享目标文件(shared object,是仅仅指Linux下的吗?)所定义的例程前,你必须导入这些例程。这有两种方式:一是声明一个外部(external)过程或函数,二是直接调用操作系统。不论使用哪种方式,例程都是直到运行时才链接到你的程序中。

Object Pascal不支持从共享库中导入变量。

静态调入

导入过程或函数最简单的方法是用external指示字声明它们,比如,

在Windows下: procedure DoSomething; external 'MYLIB.DLL';

在Linux下: procedure DoSomething; external 'mylib.so';

若你在程序中包含这个声明,MYLIB.DLL(Windows)或mylib.so(Linux)在程序启动时被调入一次,在程序的整个运行期间,标志符DoSomething总是指同一个共享库中的同一个入口点。

导入例程的声明可以直接放在需要它们的程序或单元中。但为了维护方便,你可以把external声明放在一个单独的“导入单元”中,这个单元也可以包含和库进行交互所需要的常量和类型声明。其它使用这个导入单元的模块就可以调用它声明的任何例程。

要了解external声明的信息,请参考External declarations。

Dynamic loading(动态调入)

你可以直接调用操作系统的库函数来访问一个库中的例程,这些库函数包括LoadLibrary、FreeLibrary和GetProcAddress。在Windows下,这些函数在Windows.pas单元声明,在Linux下,为了兼容性考虑,它们在SysUtils.pas单元实现,实际的Linux例程是dlopen、dlclose和dlsym(这些都在Kylix的Libc单元声明,请参考帮助)。此时,我们使用过程类型的变量来引用导入的例程。

比如,在Windows或Linux下:

- 131 -

Libraries and packages

uses Windows, ...; {On Linux, replace Windows with SysUtils }

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


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-98.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...