现在,你就能调用来自BLOCK.O或block.o 的MoveWord和FillWord例程了。
像上面的声明,经常用来访问由汇编语言编写的外部例程,你也可以直接在Object Pascal源代码中放置汇编语言写的例程。关于这方面的信息,请参考Inline assembler code。
从库导入函数
要从一个动态调入库(.so或.DLL)导入例程,把如下格式的指示字
external stringConstant;
放在一个正常的过程头或函数头的尾部。这里,stringConstant是用单引号括起来的库文件的名称。在Windwos下
function SomeFunction(S: string): string; external 'strlib.dll';
从strlib.dll导入一个叫做SomeFunction的函数。
在Linux下,
function SomeFunction(S: string): string; external 'strlib.so';
从strlib.so导入一个叫做SomeFunction的函数。
在导入例程时,它的名称可以和库中的名称不同。如果你这样做,在external指示字中指定它的原始名称。
- 83 - 比如,
Procedures and functions
external stringConstant1 name stringConstant2;
这里,第一个stringConstant给出了库文件的名称,第二个stringConstant是例程的原始名称。 在Windows下:比如,下面的声明从user32.dll(Windows API的一部分)导入一个函数。
function MessageBox(HWnd: Integer; Text, Caption: PChar; Flags: Integer): Integer; stdcall; external 'user32.dll' name 'MessageBoxA';
函数的原始名称是MessageBoxA,但导入后的名称是MessageBox。
你可以使用一个数字代替名称,来指定你要导入的例程:
external stringConstant index integerConstant;
这里,integerConstant是输出表(export table)中例程的索引。
在Linux下:比如,下面的声明从libc.so.6导入一个标准系统函数。
function OpenFile(const PathName: PChar; Flags: Integer): Integer; cdecl;
external 'libc.so.6' name 'open';
函数的原始名称是open,但导入后的名称是OpenFile。
在你的导入声明中,要保证例程的名称没有拼写错误,并且大小写一致。但在以后调用这些例程时,它们是不区分大小写的。
关于库的更多信息,请参考Libraries and packages。
Overloading procedures and functions(重载过程和函数)
你能使用相同的名称在一个作用域声明多个例程,这叫做重载。重载例程必须使用overload指示字,并且它们有不同的参数列表。比如,考虑下面的声明
function Divide(X, Y: Real): Real; overload;
begin
Result := X/Y;
end;
function Divide(X, Y: Integer): Integer; overload;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-59.html
当时买养老金就好了
海洋公约的缔约国当然可以说12海里是入侵
丑得我不要不要的作
相信通过杨洋不懈的努力和追求