转自: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 TestImpEXPORTS ObjTest FuncTest 在完成.def文件后,重新编译dll。重新编译dll后就可以对该Dll进行动态调用了,调用过程的代码如下: typedef void (*HFUNC)()HINSTANCE hDLL = LoadLibrary("Test.dll"); //加载DLLif(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中的类的(如果谁知道如何使用可以 告诉我)。
转自:http://www.360doc.com/content/10/0612/09/1602772_32627940.shtml
本文将通过一个简单的实例来说明,如何正确的导出DLL中的类、对象、函数,并如何通过静态加载或动态加载的方式来使用 DLL。
一、DLL中导出类、函数、对象
1. 创建一个空的Win32 Dynamic-Link Library项目Test
2. 在项目中添加一个Test.h头文件,该文件的内容如下:
这段代码中通过__declspec(dllexport)导出了类CTest、函数FuncTest和对象 ObjTest。在.cpp文件中实现上面的声明与类的定义后,经编译就可以生成一个.dll和.lib文件了。
二、静态加载DLL
1. 新建一个Win32 项目。
2. 将上面编译生成的.lib文件复制到,该项目下。
3. 在项目中添加一个Test.h(通过该文件实现对DLL的静态加载),该.h文件的内容主要是从DLL的.h文件中复制过来。具体内容如下:
这个.h文件与dll的.h的不同就是,在开头加了#pragma comment(lib, "test.lib"), 以及类、函数、对象前面的__declspec(dllexport)变成了__declspec(dllimport) 。通过这些修改就可以告诉编译器,这个.h 文件中定义的类、声明的函数和对象 都是从test.dll中导入的。在项目中完成对这些类、函数、对象的调用代码后,就可以将其编译成可 执行文件。将生成的可执行为文件、以及上面生成的.dll文件复制到同一个文件夹中就可以正常运行这个可执行文件。
三、动态加载DLL
如果上面的DLL需要被动态调用,这需在DLL的代码中添加一个 .def文件,在该文件中指出哪些被导出的函数和对象是可以动态调用的。根据上面的例子.def文件的内容如下:
在完成.def文件后,重新编译dll。重新编译dll后就可以对该Dll进行动态调用了,调用过程的代码如下:
上面的代码实现的对DLL中函数的动态调用,在代码中通过LoadLibrary将DLL加载到内存中,然后 GetProcAddress获得指定函数所在的内存地址(即该函数的函数指针),获得指向这个函数的指针后就可以对它进行调用了。
对于DLL中对象的动态调用过程基本上是一样的,先将DLL加载到内存,然后通过GetProcAddress获得对象 所在的地址。
从上面可以看出,DLL的动态调用过程就是将DLL加载到内存,然后通过GetProcAddress获得DLL中指定对象或函数在该内存中的地 址,通过该地址就可以对函数或对象进行调用。由于在C++中没有类的对象,也没有类指针一说,所以是无法动态使用DLL中的类的(如果谁知道如何使用可以 告诉我)。
您还没有登录,请您登录后再发表评论
创建DLL: 1. **创建新项目**:在VS2012中,选择“文件”>“新建”>“项目”,然后在模板列表中选择“Win32控制台应用程序”。在向导中,选择“动态链接库(DLL)”作为项目类型。 2. **定义接口**:DLL中的函数通常...
本文将深入探讨如何创建和使用MFC DLL。 首先,我们来理解DLL(Dynamic Link Library)的基本概念。DLL是一种可执行文件,其中包含可由多个程序共享的函数和资源。通过使用DLL,开发者可以减少内存占用,提高系统...
创建DLL的第一步是建立一个新的控制台应用项目,并将其配置为DLL类型。在Visual Studio中,选择"新建项目",然后在模板列表中选择"C++ Win32 Console Application",在后续的向导中选择"动态链接库(DLL)"并确认设置...
首先,我们创建DLL项目。打开VC6,选择"File" -> "New",然后在"Project"对话框中,选择"Win32 Project"。在"Application Settings"中,确保"Dynamic-link library (DLL)"被选中,然后点击"Finish"。这样就创建了一...
本篇文章将深入探讨如何在Delphi环境中创建DLL,并在其他程序中调用其函数。 首先,我们需要了解DLL的基本概念。DLL是一种可执行文件格式,它包含可由多个程序同时使用的代码和数据。Windows操作系统广泛支持DLL,...
本篇将详细介绍如何使用DLL创建快捷方式。 DLL(Dynamic Link Library)是Windows系统中的一种共享代码库机制,它允许多个程序同时使用同一段代码,从而节省内存并提高程序运行效率。在创建快捷方式的场景下,我们...
本篇文章将详细探讨如何在Qt环境中创建DLL,以及如何显式和隐式地使用它们。 首先,创建DLL的过程分为几个步骤: 1. **创建项目**:在Qt Creator中选择"新建项目" -> "库" -> "动态库"。然后,选择对应的编译器和...
创建DLL的步骤通常包括以下几个关键环节: 1. **设计接口**:首先,你需要定义DLL的接口,这包括确定对外公开的函数或类。这些函数将作为其他程序调用DLL的入口点。在PB11.5中,你可以通过创建一个新的函数或类并将...
本篇文章将深入探讨如何在C#中创建DLL以及如何在其他应用程序中调用这些DLL。 首先,我们来了解如何创建一个C# DLL。创建DLL的过程主要包括以下几个步骤: 1. **创建新项目**:在Visual Studio中,选择"文件" -> ...
本教程将深入探讨如何使用VC++创建DLL以及如何显式加载DLL。 首先,我们来理解DLL的基本概念。DLL是一种可执行文件,它包含可由多个应用程序同时使用的函数和资源。这种共享机制减少了内存占用,简化了软件维护,并...
在Visual Studio中创建DLL项目,你需要遵循以下步骤: 1. 打开Visual Studio,选择“新建项目”。 2. 在项目模板中,选择“Win32项目”。 3. 在配置类型中,选择“动态库(.dll)”,并确保你选择了合适的语言(C++...
在本教程中,我们将深入探讨如何使用Visual C# 2008来创建一个C# DLL。 首先,启动Visual Studio 2008。创建新项目时,选择"项目类型"下的"Visual C#",然后在模板列表中选择"类库"。这将创建一个专门为生成DLL设计...
创建DLL时,我们通常会定义一个接口头文件,其中包含将要导出的函数声明。这个头文件可以被C#或C++项目引用。然后,在C++源文件中,我们会实现这些函数,并使用`__declspec(dllexport)`关键字来导出它们。例如: ``...
**创建DLL项目** 1. 打开Delphi 7.0,选择“新建”然后选择“动态链接库(DLL)”模板。给项目命名,例如“MinMaxDLL”。 2. 在新创建的DLL项目中,我们可以在“单元(Unit)”中定义公共接口。在`unit1.pas`文件...
VS 创建 DLL 工程及使用方法 在 VS 中创建 DLL 工程是一个常见的开发需求,以下是一个基本的示例,展示如何创建一个 Win32 DLL 动态链接库,并使用该库。 DLL 工程创建 首先,需要在 VS 中创建一个新的 Win32 DLL...
【易语言创建进程载入DLL模块源码】是关于编程技术的一个主题,主要涉及的是Windows系统下使用易语言(E语言)进行进程管理和动态链接库(DLL)操作的知识点。易语言是一种中国本土开发的、面向对象的、中文编程语言...
一、创建DLL项目 1. 打开Visual Studio 2010,选择“文件”->“新建”->“项目”。 2. 在项目类型中,选择“Win32”类别,然后在模板列表中选择“Win32 Console Application”。 3. 输入项目名称和位置,然后点击...
在实际开发中,DLL还可以用来封装与硬件交互的代码、数据库访问层、复杂的算法等。通过分离核心功能和业务逻辑,DLL有助于降低项目复杂性,提高代码的可维护性和测试性。 最后,提供的文本文件`C#中创建和调用DLL....
### VC中创建DLL详解 #### 一、概述 在Visual C++ (VC) 开发环境中创建动态链接库(Dynamic Link Library, DLL)是一项常见的任务,尤其是当需要在多个应用程序之间共享代码时。本文将详细介绍如何在VC中创建DLL,...
相关推荐
创建DLL: 1. **创建新项目**:在VS2012中,选择“文件”>“新建”>“项目”,然后在模板列表中选择“Win32控制台应用程序”。在向导中,选择“动态链接库(DLL)”作为项目类型。 2. **定义接口**:DLL中的函数通常...
本文将深入探讨如何创建和使用MFC DLL。 首先,我们来理解DLL(Dynamic Link Library)的基本概念。DLL是一种可执行文件,其中包含可由多个程序共享的函数和资源。通过使用DLL,开发者可以减少内存占用,提高系统...
创建DLL的第一步是建立一个新的控制台应用项目,并将其配置为DLL类型。在Visual Studio中,选择"新建项目",然后在模板列表中选择"C++ Win32 Console Application",在后续的向导中选择"动态链接库(DLL)"并确认设置...
首先,我们创建DLL项目。打开VC6,选择"File" -> "New",然后在"Project"对话框中,选择"Win32 Project"。在"Application Settings"中,确保"Dynamic-link library (DLL)"被选中,然后点击"Finish"。这样就创建了一...
本篇文章将深入探讨如何在Delphi环境中创建DLL,并在其他程序中调用其函数。 首先,我们需要了解DLL的基本概念。DLL是一种可执行文件格式,它包含可由多个程序同时使用的代码和数据。Windows操作系统广泛支持DLL,...
本篇将详细介绍如何使用DLL创建快捷方式。 DLL(Dynamic Link Library)是Windows系统中的一种共享代码库机制,它允许多个程序同时使用同一段代码,从而节省内存并提高程序运行效率。在创建快捷方式的场景下,我们...
本篇文章将详细探讨如何在Qt环境中创建DLL,以及如何显式和隐式地使用它们。 首先,创建DLL的过程分为几个步骤: 1. **创建项目**:在Qt Creator中选择"新建项目" -> "库" -> "动态库"。然后,选择对应的编译器和...
创建DLL的步骤通常包括以下几个关键环节: 1. **设计接口**:首先,你需要定义DLL的接口,这包括确定对外公开的函数或类。这些函数将作为其他程序调用DLL的入口点。在PB11.5中,你可以通过创建一个新的函数或类并将...
本篇文章将深入探讨如何在C#中创建DLL以及如何在其他应用程序中调用这些DLL。 首先,我们来了解如何创建一个C# DLL。创建DLL的过程主要包括以下几个步骤: 1. **创建新项目**:在Visual Studio中,选择"文件" -> ...
本教程将深入探讨如何使用VC++创建DLL以及如何显式加载DLL。 首先,我们来理解DLL的基本概念。DLL是一种可执行文件,它包含可由多个应用程序同时使用的函数和资源。这种共享机制减少了内存占用,简化了软件维护,并...
在Visual Studio中创建DLL项目,你需要遵循以下步骤: 1. 打开Visual Studio,选择“新建项目”。 2. 在项目模板中,选择“Win32项目”。 3. 在配置类型中,选择“动态库(.dll)”,并确保你选择了合适的语言(C++...
在本教程中,我们将深入探讨如何使用Visual C# 2008来创建一个C# DLL。 首先,启动Visual Studio 2008。创建新项目时,选择"项目类型"下的"Visual C#",然后在模板列表中选择"类库"。这将创建一个专门为生成DLL设计...
创建DLL时,我们通常会定义一个接口头文件,其中包含将要导出的函数声明。这个头文件可以被C#或C++项目引用。然后,在C++源文件中,我们会实现这些函数,并使用`__declspec(dllexport)`关键字来导出它们。例如: ``...
**创建DLL项目** 1. 打开Delphi 7.0,选择“新建”然后选择“动态链接库(DLL)”模板。给项目命名,例如“MinMaxDLL”。 2. 在新创建的DLL项目中,我们可以在“单元(Unit)”中定义公共接口。在`unit1.pas`文件...
VS 创建 DLL 工程及使用方法 在 VS 中创建 DLL 工程是一个常见的开发需求,以下是一个基本的示例,展示如何创建一个 Win32 DLL 动态链接库,并使用该库。 DLL 工程创建 首先,需要在 VS 中创建一个新的 Win32 DLL...
【易语言创建进程载入DLL模块源码】是关于编程技术的一个主题,主要涉及的是Windows系统下使用易语言(E语言)进行进程管理和动态链接库(DLL)操作的知识点。易语言是一种中国本土开发的、面向对象的、中文编程语言...
一、创建DLL项目 1. 打开Visual Studio 2010,选择“文件”->“新建”->“项目”。 2. 在项目类型中,选择“Win32”类别,然后在模板列表中选择“Win32 Console Application”。 3. 输入项目名称和位置,然后点击...
在实际开发中,DLL还可以用来封装与硬件交互的代码、数据库访问层、复杂的算法等。通过分离核心功能和业务逻辑,DLL有助于降低项目复杂性,提高代码的可维护性和测试性。 最后,提供的文本文件`C#中创建和调用DLL....
### VC中创建DLL详解 #### 一、概述 在Visual C++ (VC) 开发环境中创建动态链接库(Dynamic Link Library, DLL)是一项常见的任务,尤其是当需要在多个应用程序之间共享代码时。本文将详细介绍如何在VC中创建DLL,...