`

VC++的DLL应用

阅读更多

1 用VC创建DLL动态连接库

 

1.1 创建dll项目

clip_image002

然后选择“一个空的dll工程”,然后点击“确定”便完成了“创建dll项目”的流程。

 

1.2 为dll项目编写源文件

新建两个文件:dllDemo.h, dllDemo.cpp

在头文件”dllDemo.h”中声明三个接口函数:

extern "C" _declspec(dllexport) int Sum(int a,int b);//加法函数
extern "C" _declspec(dllexport) int Max(int a, int b);//取较大值函数
extern "C" _declspec(dllexport) int Min(int a, int b);//取较小值函数

 

然后在“dllDemo.cpp”文件中实现三个接口函数:

#include "dllDemo.h"
extern "C" _declspec(dllexport) int Sum(int a, int b){
	return a+b;
}
extern "C" _declspec(dllexport) int Max(int a, int b){
	if(a>=b)
		return a;
	else
		return b;
}
extern "C" _declspec(dllexport) int Min(int a, int b){
	if(a>=b)
		return b;
	else
		return a;
}

 

1.3 生成dll文件

编译源文件,如果没有出现错误提示,那么,在项目文件根目录的Debug文件夹内会生成一个dll文件“dllDemo.dll”。

 

2 DLL调用

 

2.1 用C++调用显式链接

clip_image004

新建一个Win32的控制台程序进行显式调用:

1. 新建“dllConsoleEvident”的Win32控制台程序项目

2. 新建cpp文件“dllConsoleEvident.cpp”

3. 将在第一节中,在Debug目录下编译生成的“dllDemo.dll”(显式调用时只需要这一个文件就够了)文件复制到“dllConsoleEvident”项目下的Debug文件夹根目录下

4. 在“dllConsoleEvident.cpp”文件中编写以下代码对dll中的函数进行显式调用

 

//动态加载DLL文件
#include <iostream.h>
#include<windows.h>
void main(void){
	typedef int(*pMax)(int a,int b);//函数指针
	typedef int(*pMin)(int a,int b);
	pMax Max=NULL;
	pMin Min=NULL;
	HINSTANCE hDLL;
	hDLL=LoadLibrary("dlldemo.dll");//加载动态链接库dlldemo.dll文件;
	Max=(pMax)GetProcAddress(hDLL,"Max");
	Min=(pMin)GetProcAddress(hDLL,"Min");
	if (Max)//如果取出函数成功,则执行下面的语句
	{
		int A=Max(5,8);
		cout<<"比较的结果为"<<A<<endl;
	} else {
		cout<<"比较的结果为"<<"max error"<<endl;
	}
	if (Min){
		int B=Min(5,8);
		cout<<"比较的结果为"<<B<<endl;
	} else{
		cout<<"比较的结果为"<<"min error"<<endl;
	}
	FreeLibrary(hDLL);//卸载MyDll.dll文件;
}

 

 

2.2 用C++隐式链接(Win32控制台程序)

clip_image006

新建一个Win32控制台程序演示静态调用

1. 利用向导新建“dllConsoleStaticDemo”的空工程

2. 将dllDemo.dll”和“dllDemo.lib文件复制到Debug目录下,并在项目中包含“dllDemo.lib”文件,否则会出现dll函数找不到的连接错误

3. 新建“dllConsoleStaticDemo.cpp”文件,并写入如下代码:

extern "C"_declspec(dllimport) int Sum(int a,int b);
extern "C"_declspec(dllimport) int Max(int a,int b);
extern "C"_declspec(dllimport) int Min(int a,int b);
#include <iostream.h>
void main(){
	int c=Sum(4,5);
	cout<<c<<endl;
	c=Max(5,6);
	cout<<c<<endl;
	c=Min(5,6);
	cout<<c<<endl;
	cout<<"Hello,dllConsoleTest~!"<<endl;
}

 

分享到:
评论

相关推荐

    vc++ DLL应用实例

    本篇文章将深入探讨“vc++ DLL应用实例”,通过分析描述中的“简易Dll调用实例”和标签中的“DLL使用、VS2005、VC++源码”,我们将详细讲解如何在VC++环境中创建和使用DLL。 首先,DLL的基本概念是:动态链接库是一...

    VC++ DLL for Socket

    总的来说,"VC++ DLL for Socket"项目是一个综合性的网络通信解决方案,通过VC++的DLL技术封装了Socket通信的复杂细节,使得其他应用程序可以方便地调用这些功能,实现高效的网络交互。对于学习和实践网络编程,尤其...

    VC++DLL_VC++源码_

    本示例着重介绍如何使用VC++来创建和使用DLL,以便与其他应用程序共享数据。 首先,我们需要理解VC++中的DLL项目类型。在Visual Studio中,你可以选择创建一个新的“Win32动态链接库(DLL)”项目。这将生成一个...

    VC++dll开发与系统编程(实例)

    本资源集成了“VC++dll开发与系统编程”的实例,通过25个具体的项目,深入浅出地介绍了这两个关键领域的实践应用。 首先,让我们详细探讨DLL开发。DLL文件包含了可执行代码和数据,它们可以在运行时被多个进程加载...

    获得程序启动参数--VC++,DLL,API

    本文将深入探讨如何在VC++环境中,通过DLL(动态链接库)和API(应用程序编程接口)来获取其他程序的启动参数,同时也会涉及进程注入的概念。 首先,VC++是一个由微软开发的集成开发环境,广泛用于C++编程。DLL是一...

    vc++dll编程(附源码)

    本资料包“VC++DLL编程(附源码)”提供了深入浅出的DLL编程教程,通过PDF文本形式,详细讲解了DLL的基础概念、创建过程以及使用方法。 首先,DLL的核心概念是共享。在Windows操作系统中,DLL文件包含可由多个应用...

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

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

    JNA调用VC++dll

    标题 "JNA调用VC++dll" 描述的是一个技术问题,涉及到Java Native Access (JNA)库在Java应用程序中如何调用由VC++编译的动态链接库(DLL)。这种技术允许Java代码与本地操作系统接口进行交互,扩展了Java的跨平台能力...

    VC++DLL 供java调用

    本项目就是这样一个示例,展示了如何使用Visual Studio 2010(VS2010)的VC++环境开发一个动态链接库(DLL),以便通过Java的Java Native Interface(JNI)进行调用。以下将详细介绍这个过程中的关键知识点。 1. **...

    VC++ DLL 继承皮肤 图片

    在VC++环境中,DLL(Dynamic Link Library)是一种可重用代码的库,它允许开发者将功能模块化,以便多个应用程序可以共享同一段代码。DLL文件不仅有助于减少内存占用,还能提高程序的性能和加载速度。当涉及到“继承...

    c#调用vc++DLL保护进程

    首先,我们需要理解C#与VC++之间的互操作性,然后讨论如何创建和使用DLL,最后讲解如何在C#中调用这些DLL函数以实现进程保护。 一、C#与VC++的互操作性 C#和VC++虽然属于不同的编程语言,但两者都支持COM(组件...

    VC++ DLL动态链接库编程详解

    本文将深入探讨VC++中如何进行DLL的开发与应用。 ### 1. DLL的创建 创建DLL主要分为以下几步: 1. **选择项目类型**:在Visual Studio中,新建一个项目,选择“Win32项目”,然后在向导中选择“动态库(DLL)”...

    VC++动态链接库(dll)编程深入浅出

    在Windows操作系统中,动态...总之,“VC++动态链接库(dll)编程深入浅出”这份资料将指导你全面了解和掌握VC++中创建和使用DLL的各种技巧和方法,通过实践应用,你将能够有效地利用DLL来提升你的软件开发效率和质量。

    DLL_Class.rar_Class Dll_VC++ dll_dll 制作_mapgis_visual c

    标题中的“DLL_Class.rar_Class Dll_VC++ dll_...8. 在其他MapGIS应用中测试和使用创建的DLL。 通过这个教程,开发者可以学习到如何利用C++和MapGIS的API来创建自己的功能模块,增强MapGIS的功能,解决特定的GIS问题。

    常用的VC++DLL包

    在IT行业中,VC++DLL(动态链接库)是开发者经常使用的工具,特别是在Windows平台上的软件开发。DLL(Dynamic Link Library)文件是一种可被多个程序同时使用的代码和数据的集合,它能够有效地减少内存占用和提高...

    vc++ dll注入api hook.zip

    在“vc++ dll注入api hook.zip”这个压缩包中,包含了实现这两种技术的相关源代码,如`apihijack.cpp`、`apihijack.h`以及测试程序`TestLauncher`和`TestDLL`。 首先,我们来理解DLL注入。DLL(动态链接库)注入是...

    .Net 调用 VC++ DLL 示例

    本示例主要探讨如何在.NET(以C#为例)中调用VC++编写的DLL,涉及的关键技术包括字符串处理、指针操作、结构传递以及数组操作。下面将详细解释这些知识点。 1. **字符串处理**: 在.NET中,字符串通常是Unicode的`...

    VC++动态链接库编程 dll编写教程

    这篇教程将深入讲解如何使用VC++进行DLL的编写与应用。 一、DLL的作用 1. 资源共享:DLL可以被多个进程同时调用,节省内存资源,提高程序运行效率。 2. 代码更新:当DLL中的函数或数据改变时,无需重新编译所有依赖...

    VC_DLL.rar_dll_lib调用_vc dll_vc lib_vc++ dll

    VC++通过`#pragma comment(lib, "library.lib")`预处理器指令或`LoadLibrary`和`GetProcAddress`API函数来链接和调用DLL中的函数。 1. **创建DLL**: 创建一个VC++ DLL项目,选择相应的模板。在DLL的头文件中声明...

Global site tag (gtag.js) - Google Analytics