`
yangke_love
  • 浏览: 17315 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

如何正确的创建与使用DLL

 
阅读更多

转自:http://www.360doc.com/content/10/0612/09/1602772_32627940.shtml

 

 

本文将通过一个简单的实例来说明,如何正确的导出DLL中的类、对象、函数,并如何通过静态加载或动态加载的方式来使用 DLL。

一、DLL中导出类、函数、对象

1. 创建一个空的Win32 Dynamic-Link Library项目Test

2. 在项目中添加一个Test.h头文件,该文件的内容如下:

//导出类
class __declspec(dllexport) CTest
{
...
}
;

//导出函数
__declspec(dllexport) void FuncTest();


//导出对象
extern __declspec(dllexport) CTest  ObjTest;

这段代码中通过__declspec(dllexport)导出了类CTest、函数FuncTest和对象 ObjTest。在.cpp文件中实现上面的声明与类的定义后,经编译就可以生成一个.dll和.lib文件了。

二、静态加载DLL

1. 新建一个Win32 项目。

2. 将上面编译生成的.lib文件复制到,该项目下。

3. 在项目中添加一个Test.h(通过该文件实现对DLL的静态加载),该.h文件的内容主要是从DLL的.h文件中复制过来。具体内容如下:

#pragma comment(lib, "test.lib")

//导入类
class __declspec(dllimport) CTest
...
{
...
}
;

//导入函数
__declspec(dllimport) void FuncTest();


//导入对象
extern __declspec(dllimport) CTest  ObjTest;

这个.h文件与dll的.h的不同就是,在开头加了#pragma comment(lib, "test.lib"), 以及类、函数、对象前面的__declspec(dllexport)变成了__declspec(dllimport) 。通过这些修改就可以告诉编译器,这个.h 文件中定义的类、声明的函数和对象 都是从test.dll中导入的。在项目中完成对这些类、函数、对象的调用代码后,就可以将其编译成可 执行文件。将生成的可执行为文件、以及上面生成的.dll文件复制到同一个文件夹中就可以正常运行这个可执行文件。

三、动态加载DLL

如果上面的DLL需要被动态调用,这需在DLL的代码中添加一个 .def文件,在该文件中指出哪些被导出的函数和对象是可以动态调用的。根据上面的例子.def文件的内容如下:

LIBRARY    TestImp

EXPORTS
    ObjTest
        FuncTest

在完成.def文件后,重新编译dll。重新编译dll后就可以对该Dll进行动态调用了,调用过程的代码如下:

typedef void (*HFUNC)()

HINSTANCE hDLL 
= LoadLibrary("Test.dll");             //加载DLL

if(hDLL)
{
           HFUNC hFun 
= (HFUNC)GetProcAddress(hDLL, "FuncTest");       //获得Dll中FuncTest函数的指针。

           
if (hFun)
                 hFun();    
//执行函数 FuncTest
            else
                   ...            
//没有找到函数FuncTest
}

else
{
//加载失败
}

 上面的代码实现的对DLL中函数的动态调用,在代码中通过LoadLibrary将DLL加载到内存中,然后 GetProcAddress获得指定函数所在的内存地址(即该函数的函数指针),获得指向这个函数的指针后就可以对它进行调用了。

对于DLL中对象的动态调用过程基本上是一样的,先将DLL加载到内存,然后通过GetProcAddress获得对象 所在的地址。

 从上面可以看出,DLL的动态调用过程就是将DLL加载到内存,然后通过GetProcAddress获得DLL中指定对象或函数在该内存中的地 址,通过该地址就可以对函数或对象进行调用。由于在C++中没有类的对象,也没有类指针一说,所以是无法动态使用DLL中的类的(如果谁知道如何使用可以 告诉我)。 

分享到:
评论

相关推荐

    dll创建和使用

    创建DLL: 1. **创建新项目**:在VS2012中,选择“文件”>“新建”>“项目”,然后在模板列表中选择“Win32控制台应用程序”。在向导中,选择“动态链接库(DLL)”作为项目类型。 2. **定义接口**:DLL中的函数通常...

    MFC dll的创建与使用

    本文将深入探讨如何创建和使用MFC DLL。 首先,我们来理解DLL(Dynamic Link Library)的基本概念。DLL是一种可执行文件,其中包含可由多个程序共享的函数和资源。通过使用DLL,开发者可以减少内存占用,提高系统...

    如何正确使用和创建DLL

    创建DLL的第一步是建立一个新的控制台应用项目,并将其配置为DLL类型。在Visual Studio中,选择"新建项目",然后在模板列表中选择"C++ Win32 Console Application",在后续的向导中选择"动态链接库(DLL)"并确认设置...

    如何用vc6创建和使用dll

    首先,我们创建DLL项目。打开VC6,选择"File" -> "New",然后在"Project"对话框中,选择"Win32 Project"。在"Application Settings"中,确保"Dynamic-link library (DLL)"被选中,然后点击"Finish"。这样就创建了一...

    DelphiDll创建与调用

    本篇文章将深入探讨如何在Delphi环境中创建DLL,并在其他程序中调用其函数。 首先,我们需要了解DLL的基本概念。DLL是一种可执行文件格式,它包含可由多个程序同时使用的代码和数据。Windows操作系统广泛支持DLL,...

    CreateShortcut使用DLL创建快捷方式

    本篇将详细介绍如何使用DLL创建快捷方式。 DLL(Dynamic Link Library)是Windows系统中的一种共享代码库机制,它允许多个程序同时使用同一段代码,从而节省内存并提高程序运行效率。在创建快捷方式的场景下,我们...

    DLL在Qt中的创建与使用

    本篇文章将详细探讨如何在Qt环境中创建DLL,以及如何显式和隐式地使用它们。 首先,创建DLL的过程分为几个步骤: 1. **创建项目**:在Qt Creator中选择"新建项目" -> "库" -> "动态库"。然后,选择对应的编译器和...

    PB11.5创建DLL和调用示例_pb11添加新dll_PB11.5创建DLL和调用示例_

    创建DLL的步骤通常包括以下几个关键环节: 1. **设计接口**:首先,你需要定义DLL的接口,这包括确定对外公开的函数或类。这些函数将作为其他程序调用DLL的入口点。在PB11.5中,你可以通过创建一个新的函数或类并将...

    C#中创建及调用DLL

    本篇文章将深入探讨如何在C#中创建DLL以及如何在其他应用程序中调用这些DLL。 首先,我们来了解如何创建一个C# DLL。创建DLL的过程主要包括以下几个步骤: 1. **创建新项目**:在Visual Studio中,选择"文件" -> ...

    VC++创建Dll与显示加载Dll

    本教程将深入探讨如何使用VC++创建DLL以及如何显式加载DLL。 首先,我们来理解DLL的基本概念。DLL是一种可执行文件,它包含可由多个应用程序同时使用的函数和资源。这种共享机制减少了内存占用,简化了软件维护,并...

    visual studio 创建dll和使用dll

    在Visual Studio中创建DLL项目,你需要遵循以下步骤: 1. 打开Visual Studio,选择“新建项目”。 2. 在项目模板中,选择“Win32项目”。 3. 在配置类型中,选择“动态库(.dll)”,并确保你选择了合适的语言(C++...

    C# DLL 创建 源代码

    在本教程中,我们将深入探讨如何使用Visual C# 2008来创建一个C# DLL。 首先,启动Visual Studio 2008。创建新项目时,选择"项目类型"下的"Visual C#",然后在模板列表中选择"类库"。这将创建一个专门为生成DLL设计...

    C#与C++之间DLL文件的创建与调用DEMO演示

    创建DLL时,我们通常会定义一个接口头文件,其中包含将要导出的函数声明。这个头文件可以被C#或C++项目引用。然后,在C++源文件中,我们会实现这些函数,并使用`__declspec(dllexport)`关键字来导出它们。例如: ``...

    delphi创建并调用dll教学实例

    **创建DLL项目** 1. 打开Delphi 7.0,选择“新建”然后选择“动态链接库(DLL)”模板。给项目命名,例如“MinMaxDLL”。 2. 在新创建的DLL项目中,我们可以在“单元(Unit)”中定义公共接口。在`unit1.pas`文件...

    VS创建DLL工程及使用方法

    VS 创建 DLL 工程及使用方法 在 VS 中创建 DLL 工程是一个常见的开发需求,以下是一个基本的示例,展示如何创建一个 Win32 DLL 动态链接库,并使用该库。 DLL 工程创建 首先,需要在 VS 中创建一个新的 Win32 DLL...

    易语言创建进程载入DLL模块源码

    【易语言创建进程载入DLL模块源码】是关于编程技术的一个主题,主要涉及的是Windows系统下使用易语言(E语言)进行进程管理和动态链接库(DLL)操作的知识点。易语言是一种中国本土开发的、面向对象的、中文编程语言...

    vs2010创建和使用动态链接库(dll)

    一、创建DLL项目 1. 打开Visual Studio 2010,选择“文件”->“新建”->“项目”。 2. 在项目类型中,选择“Win32”类别,然后在模板列表中选择“Win32 Console Application”。 3. 输入项目名称和位置,然后点击...

    C#中创建和调用DLL实例

    在实际开发中,DLL还可以用来封装与硬件交互的代码、数据库访问层、复杂的算法等。通过分离核心功能和业务逻辑,DLL有助于降低项目复杂性,提高代码的可维护性和测试性。 最后,提供的文本文件`C#中创建和调用DLL....

    VC中创建DLL

    ### VC中创建DLL详解 #### 一、概述 在Visual C++ (VC) 开发环境中创建动态链接库(Dynamic Link Library, DLL)是一项常见的任务,尤其是当需要在多个应用程序之间共享代码时。本文将详细介绍如何在VC中创建DLL,...

Global site tag (gtag.js) - Google Analytics