科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在Delphi和VC中创建和调用动态链接库

在Delphi和VC中创建和调用动态链接库

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

大家在软件开发时经常会遇到这样的情况,在不同的开发环境中为实现一些功能相同的过程。

作者:丛蓉 李恺 来源:yesky 2007年11月1日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
二、Delphi中DLL的调用

  调用DLL有两种方法,一种是在应用程序装载时调用,另一种是在应用程序运行时调用。

  (1) 装载时调用DLL

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

Implementation
Function functionname(argment):Boolean;far;External 'DllName';
  
  其中External关键字后面的引号内是DLL的文件名,该文件一般应放在系统的system目录下,或与调用它的项目同一目录。声明以后即可在Pas文件任何地方引用DLL函数。

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

  (2) 运行时调用DLL

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

  假定你欲调用的DLL中包括一个函数:

Function checkpwd(pwd:string):boolean;export;
  
  那么,首先在欲调用DLL的程序Type类型声明处加入一句:

Type
Tcheckpwd= function(pwd:string):boolean;
  
  此句的作用如同C++中声明的函数指针。

  然后定义如下变量∶

Var
  aptr:TFarproc;
lhnd:THandle;
flag:boolean;

  其中Aptr,lhnd两变量声明必须有,flag是DLL函数返回值,视情况而定。在调用DLL处加入如下语句进行DLL装载:

lhnd:=Loadlibrary('路径:DLL文件名');{如lhnd:=Loadlibrary('c:\project1.dll');
aptr:=GetprocAddress(lhnd,'checkpwd');
  
  下面可直接调用DLL了:

flag:=Tcheckpwd(aptr)( 'pwd');{根据函数填相应的变量参数}
  
  调用完以后,用FreeLibrary释放DLL占用的内存:

FreeLibrary(lhnd);
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章