`
EJB_wawa
  • 浏览: 108994 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

写调用动态链接库DLL的应用程序

阅读更多
众所周知,Windows的可执行文件可以划分为两种形式:程序和动态链接库(DLL)。而在什么时候需要使用动态链接库呢,动态链接库又有一些什么样的好处呢:
1、一个DLL可以提供给不同的程序使用,而这个DLL只需要在内存中加载一次,这样就节省了系统的内存。
2、我们可以提供DLL的不同版本来更新我们的程序,而不需要重新编译我们的程序。
3、使用了DLL组件包可以大大减小可执行文件的规模。
4、如果应用程序是基于同一个组件包,我们将接生许多内存和代码分配。
从上面看来,DLL是独立于编程语言的;在Windows编程环境下,我们可以在不同的编程语言中调用相互编写的动态链接库,从而满足不同的需要,并且大大的提高了更新效率。
下面我就讲讲使用在Delphi 5.0中如何编写调用动态链接库的应用程序。

首先,我们要创建一个DLL,在Delphi的菜单中选择File->New,选中DLL,然后点击OK。
 
这时可以出现编写环境,请注意那里的英文说明,大概讲述了编写DLL时需要注意的地方,其中有一个非常重要的就是尽量避免使用string类型而采用pchar或者shortstring类型,否则传递的参数将出现乱码。
然后,将第一行的Library Project1;改成Lirbrary MyDLL;,同时保存文件,并编译,这就产生了一个DLL;当然这个DLL现在还什么都没有。现在我们给他加上一些功能。

uses
SysUtils,Windows,Registry,Regstr; 

Function ChkBoolean():Boolean;stdcall;
Begin
Result:True;
End;

procedure WriteReg(UserName:pchar);stdcall;
var
Reg: TRegistry;
begin
Reg:=TRegistry.Create;
errFind:=False;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
If Reg.OpenKey(''SOFTWARE\MyDLL\''+UserName,True) then
Reg.WriteString(''Name'',UserName);
finally
Reg.CloseKey;
Reg.Free;
end;
end;

输入以上的代码,分别是一个函数和一个过程,第一个函数ChkBoolean返回一个真;过程WriteReg读取一个参数并将该参数写入注册表。在程序的最后必须加上一句:
Exports ChkBoolean,WriteReg;
这样表示向外声明可提供给应用程序的函数或过程,也只有在这里声明的函数或过程可以给其他应用程序所调用。
最后,我们编译整个程序,将产生一个MyDll.dll的文件。

现在,让我们创建一个应用程序来调用这个DLL。
点击File->New Application,保存这个工程,记住要和刚才那个DLL工程在同一个目录。
在 implementation 下编写如下代码:
type
TMyProcedure=procedure(UseNam:pchar);stdcall;
function ChkBoolean():Boolean; external MyDLL.DLL'';
第一行定义了一个过程类型,下面会看到这有什么用;
在我们程序的Form上放置一个TEdit和TButton控件,使其如下图所示:
 
双击按钮,编写onClick事件,代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
HInst:Thandle;
FPointer:TFarProc;
MyProc:TMyProcedure;
Begin
If ChkBoolean Then
//直接返回函数值,为真,继续运行……
Begin
HInst:=LoadLibrary(''MyDLL.DLL'');
if HInst>0 then
try
FPointer:=GetProcAddress(Hinst,Pchar(''WriteReg''));
//GetProcAddress API函数用于找到DLL中的函数名,并返回一个指针
if FPointer<>nil then
begin
MyProc:=TMyProcedure(FPointer);
//将该函数指针转换成相应的数据类型并调用它
Try
MyProc(Edit1.Text);
except on E:Exception do
ShowMessage(E.Message);
end;
end
else
ShowMessage(''DLL procedure not found!'');
finally
FreeLibrary(HInst);
end
else
ShowMessage(''Library not found!'');
End;
end;

编写完以上代码,马上运行应用程序。在输入框处输入任意字符,并点击按钮,再打开你的注册表,需要HKEY_LOCAL_MACHINE\ SOFTWARE,看看多了些什么。
很有意思吧,呵呵!通过这样一个简单的例子,你可以更加好的运用DLL的强大优势。同时,用DELPHI编写的DLL还可以提供给其他语言环境调用啊,比如VB,VC等等。还不赶快试试?
分享到:
评论

相关推荐

    LabVIEW调用动态链接库DLL详细介绍(包会) .txt

    ### LabVIEW调用动态链接库DLL详解 #### 一、前言 在现代软件开发过程中,经常需要将一些复杂的功能封装成独立的模块或者库,以便于复用和维护。对于LabVIEW这样的图形化编程环境而言,能够有效地调用外部的动态...

    C#中如何调用动态链接库DLL

    ### C#中调用动态链接库DLL的知识点详解 #### 一、动态链接库(DLL)简介 **动态链接库**(Dynamic Link Library,简称DLL)是Microsoft Windows系统中的一个重要组成部分,广泛应用于各种应用程序中。DLL文件本质...

    vc调用dev-c++动态链接库dll示例

    首先,我们来看标题中的关键点:“vc调用dev-c++动态链接库dll示例”。这表明我们将使用VC作为客户端应用程序,调用由Dev-C++开发并编译的DLL。Dev-C++是一款轻量级的C/C++集成开发环境,而VC则是微软提供的专业级...

    java调用C++动态链接库dll接口

    本项目涉及的"java调用C++动态链接库dll接口"是解决这种跨语言交互问题的一种方法,主要利用了Java Native Interface(JNA)这一技术。 JNA是Java平台的标准库,它允许Java代码直接调用本机库(如DLL或.so文件)的...

    Java调用动态链接库(Java 调用 DLL)

    Java调用动态链接库(DLL)是Java编程中一个比较特殊的技术,主要涉及到Java与本地代码的交互。在Windows系统中,DLL(Dynamic Link Library)是实现函数复用的一种方式,它包含了一系列可供其他程序调用的函数或数据...

    C# dll的调用(动态链接库创建与使用)

    在编程世界中,动态链接库(DLL,Dynamic Link Library)是一种重要的共享代码资源,它可以被多个应用程序同时调用,以节省内存并实现代码重用。C# 作为.NET框架的一部分,同样支持创建和调用DLL。本文将深入探讨C#...

    S7.Net动态链接库DLL.rar

    《S7.Net动态链接库DLL在西门子PLC通讯中的应用详解》 在工业自动化领域,西门子PLC(可编程逻辑控制器)因其稳定性和灵活性被广泛应用。本文将详细探讨与标题“S7.Net动态链接库DLL.rar”相关的知识点,主要关注S7...

    c++ 创建动态链接库dll并调用

    本解决方案详细介绍了如何创建C++动态链接库DLL以及如何从另一个C++程序中调用其功能。以下是对整个过程的详细说明: 1. **创建DLL项目(mydll)**: - 在Visual Studio或其他C++编译环境中,新建一个Win32项目,...

    C#调用动态链接库的几个方法

    在C#中调用动态链接库(DLL)是常见的操作,这通常用于利用非托管代码的功能,比如Windows API或其他第三方库。以下是一些方法来实现这一目标: 1. **DllImport 特性**: - `DllImport` 特性是C#中调用非托管DLL的...

    Qt直接调用动态库dll

    在编程领域,动态链接库(DLL)是一种共享代码的方式,允许多个程序同时使用同一段代码,从而节省内存和提升效率。在Windows操作系统中,DLL文件是广泛应用的组件,而Qt是一个跨平台的C++应用程序开发框架。本篇将...

    c#调用dll动态链接库例子

    在.NET框架中,C#语言提供了丰富的功能,其中包括调用非托管代码,即Windows平台上的动态链接库(DLL)。本文将深入探讨如何在C#项目中调用DLL动态链接库,通过实例演示如何进行多层引用,并解释如何访问DLL中的类和...

    火山PC动态链接库例子(动态DLL).rar

    在Windows操作系统中,动态链接库(Dynamic Link Library, DLL)是一种共享代码的机制,它允许多个应用程序同时使用同一段代码,从而节省内存并方便代码维护。"火山PC动态链接库例子(动态DLL)"是一个示例项目,展示...

    动态链接库dll

    动态链接库DLL是Windows编程中的核心概念,它提供了一种高效、灵活的方式,使得代码和资源能够在多个程序间共享。理解和掌握DLL的使用不仅可以优化程序性能,也是提升编程技能的重要步骤。通过实际编写和测试程序,...

    C_中如何调用动态链接库DLL

    ### 如何在C#中调用动态链接库DLL #### 动态链接库(DLL)简介 动态链接库(Dynamic Link Library,简称DLL)是微软Windows操作系统中的一个重要组成部分。DLL是一种特殊的文件格式,包含了可以被多个程序共享的...

    隐式的调用动态链接库

    本文将重点讲解隐式调用动态链接库的方法。 隐式链接是在编译和链接阶段,编译器会将DLL中的函数名和地址映射到可执行文件中,这样在程序运行时,操作系统可以直接找到并调用这些函数。这种链接方式对于那些希望在...

    C#中如何调用动态链接库DLL.pdf

    ### C#中如何调用动态链接库DLL #### 动态链接库DLL简介 动态链接库(DLL)是Microsoft Windows操作系统的重要组成部分,它包含可被程序或其他DLL调用的函数,从而完成特定操作。DLL不包含可执行代码本身,不能独立...

    使用Inno setup 制作安装包 安装包脚本调用动态链接库实现特殊处理

    本篇将深入探讨如何利用Inno Setup来制作安装包,并通过安装脚本调用动态链接库(DLL)以实现特定功能。 一、Inno Setup基础 Inno Setup是一个开源的安装包制作工具,它支持创建自解压可执行文件、传统安装程序和...

    JAVA调用动态链接库DLL之JNative学习源码

    `JNative` 是一个用于Java调用本地代码(如DLL)的开源库,它提供了一个方便的接口,使得Java程序员可以轻松地与动态链接库进行交互。本教程将围绕如何使用`JNative`来调用DLL进行深入讲解。 首先,我们要理解Java...

    7z动态链接库dll文件及解压压缩示例.zip

    在IT行业中,动态链接库(DLL)是一种非常重要的资源,它允许不同的应用程序共享代码和数据。7z.dll是7-Zip软件的动态链接库,它提供了对7-Zip压缩算法的底层访问。7-Zip是一种免费且开源的压缩工具,支持多种文件...

Global site tag (gtag.js) - Google Analytics