Delphi如何使用DLL?(50分)

  • 主题发起人 主题发起人 changzheng
  • 开始时间 开始时间
C

changzheng

Unregistered / Unconfirmed
GUEST, unregistred user!
function Square(x: integer): integer; external 'oneDll';

感觉DELPHI创建使用DLL似乎比VC麻烦?(因为书上的例子都没过:~()
完全按照书上说的创建DLL,可是做一个应用程序里调用,总说找不到要调用的DLL文件
(我已copy到sysytem32目录了)

请帮忙,谢谢
 
external 'oneDll.dll';
后缀名不可省
 
很容易啊,两种方法!一是像上面的静态调用,二是用API(LoadLibrary)动态调用!大小写不能错,不包括ShareMem单元时只能传送Pchar,ShortString,integer等类型数据,而不能用String
 
补充Pearl.:
EXE中LoadLibrary(你的连接库)也可以
在DLL中EXPORTS 输出函数
 
转贴:

调用DLL有两种方法,一种是在应用程序装载时调用,另一种是在应用程序运行时调用。
首先介绍装载时DLL的调用:

  (1)装载时调用DLL

  在调用DLL的Pas文件中,对DLL函数进行外部声明,
声明应位于Implementation的Uses语句后,形式如下:

  Implementation

  Uses Dialogs;

  Function Name(argment):Boolean;far;External 'Call?Name';

其中External关键字后面的引号内的字串是DLL的文件名。
声明以后即可在Pas文件任何地方引用DLL函数。

  装载时调用DLL的优点是速度较快,程序间也可共享代码。

  (2)运行时调用DLL

  DLL的另一种调用方法是在运行时调用。
要调用到Windows的API函数:LoadLibrary,GetProcAddress等。
主要用于调用DELPHI和其它语言,特别是C++编译的DLL。

  假定你的DLL包括一个函数:

  Function MyFunc(aparam:word):string;export;

  首先在程序Type类型声明处加入一句:

  Type
  TMyfunc = function(aparam:word):string;

  此句的作用如同C++中声明的函数指针。

  然后定义如下变量∶

  Var
   aptr:TFarproc;
  lhnd:THandle;
s:string;

  其中Aptr,lhnd两变量声明必须有,s是DLL函数返回值,视情况而定。

  在调用DLL处加入如下语句进行DLL装载:
  lhnd:=Loadlibrary('路径:DLL文件名');{如lhnd:=Loadlibrary('c:/aa/bb.dll');
  aptr:=GetprocAddress(lhnd,'Myfunc');

  下面可直接调用DLL了:
  s:=TMyfunc(bptr)(60);{根据函数填相应的变量参数}

  调用完以后,用FreeLibrary释放DLL占用的内存:
  FreeLibrary(lhnd);
 
终于成了,是扩展名的问题,谢谢
 
后退
顶部