有一些东西是一定要动手实现的,学习有的点可以慢慢积累,但是有一些基本的盲区是一定不要跨过去的。
这里不过多的讲解Dll的内容,只是记录一下常用的两种dll编写方法。
一. Dll的编写
第一种方法:
首先打开vs2010---> win32 application--->选择一个dll工程(MyDll)---->不要选择空项目,让它帮你生产dllmain函数入口。你熟悉以后也可以自己写。
// dllmain.cpp #include "stdafx.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
第一种方式使用 extern "C" _declspec(dllexport)的方式,我们以 加减法为例子:
// MyDll.cpp extern "C" _declspec(dllexport) int Max(int a, int b); extern "C" _declspec(dllexport) int Min(int a, int b); int Max(int a, int b) { if(a>=b)return a; else return b; } int Min(int a, int b) { if(a>=b)return b; else return a; }
第二种方式:
(1)去掉 以下申明
//extern "C" _declspec(dllexport) int Max(int a, int b); //extern "C" _declspec(dllexport) int Min(int a, int b);
(2)在Min,Max函数前面加上 extern "c" ,导出函数一定要按这种方式来写,避免调用错误。
extern "c" int Max(int a, int b) { if(a>=b)return a; else return b; } extern "c" int Min(int a, int b) { if(a>=b)return b; else return a; }
(3) 添加.def文件,在该文件中写明输出函数(由于我的vs不能自动添加,因为我在本地手动创建了一个.def文件,并在工程配置属性Link-->Input--->Module Definition File中配置.def文件名称)
; ; Cmpnt1 module-definition file ; LIBRARY MyDll.dll DESCRIPTION '(c)1996-1997 Dale E. Rogerson' EXPORTS Min @1 PRIVATE Max @2 PRIVATE
直接Build工程即可在目录下生成相应的.lib和.dll文件。
二. Dll的调用
(1) 隐式链接。
隐式链接就是在程序开 始执行时就将 DLL文件加载到应用程序当中。只要将导入函数关键字 _declspec (dllimport) 函数名等写到应用程序相的头文件中就可 以了。这种方法需要把.lib文件也拷贝到你的测试工程下。
#pragma comment(lib,"Messagebox.lib") extern "C"_declspec(dllimport) int Max(int a,int b); extern "C"_declspec(dllimport) int Min(int a,int b); #include <windows.h> #include<stdio.h> int main() { int a; a=Max(8,10); printf("比较的结果为%d\n",a); a=Min(8,10); printf("比较的结果为%d\n",a); return 0; }
(2)动态链接
动态链接不需要拷贝.lib文件到测试工程目录。动态链接是在程序中动态加载,动态卸载,这样可以减少内存使用。在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来。然后再用GetProcAddress()获取想要引入的函数。程序退出时使用FreeLibrary或AfxFreeLibrary释放动态链接库。
/* 注意:要将之前的MyDll.dll拷贝到工程目录哦,不需要拷贝lib */ #include<windows.h> #include<stdio.h> void main(void) { //使用类型定义关键字定义指向DLL中相同的函数原型指针 typedef int(*pMax)(int a,int b); typedef int(*pMin)(int a,int b); HINSTANCE hDLL;//声明一个DLL实例文件句柄 pMax Max; int a=0; hDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件; Max=(pMax)GetProcAddress(hDLL,"Max");//获取导入到应用程序中的函数指针 a=Max(5,8); printf("比较的结果为%d\n",a); FreeLibrary(hDLL);//卸载MyDll.dll文件; }
参考:见附件!
相关推荐
本资料包包含“dll入门”的PDF、Word版文档以及源码,是学习DLL编程的理想资源。 首先,我们需要了解DLL的基本概念。DLL文件实质上是包含了一组函数和数据的库,这些函数和数据可以在运行时被多个程序共享。通过...
首先,我们来看标题"免分的,DLL入门例子,大家帮顶"。这表明这是一个关于DLL基础的教程,作者可能是为了帮助初学者而分享的一个免收费的资源。"大家帮顶"是网络用语,意思是希望社区成员能支持和推广这个教程。 ...
### VC编写DLL入门详解 #### 一、概述 动态链接库(Dynamic Link Library,简称DLL)是一种可被多个程序同时使用的文件,它提供了一种有效的方法来共享代码和资源。DLL 文件包含可供程序调用的功能,如绘图例程、...
在"VC MFC DLL 入门资料"中,你可能会学到以下知识点: 1. **VC++集成开发环境的使用**:如何创建新项目、添加源文件、设置编译选项、调试程序等基本操作。 2. **MFC基础**:MFC架构的介绍,包括主要的类和它们的...
LIB和dll入门实例,简单明了,现学现用
DLL(Dynamic Link Library)则是Windows操作系统中的一种共享库机制,它允许多个程序共享同一段代码和数据,从而节省内存并提高程序间的交互性。本篇文章将深入探讨在VC++环境下使用MFC进行DLL开发的基础知识。 1....
在“dll入门课”中,我们将会深入探讨以下关键知识点: 1. **DLL的基本概念**:了解DLL是什么,它的作用以及为什么在Windows平台上广泛使用。DLL文件包含了函数定义、资源和数据,允许不同程序之间共享这些功能,而...
DLL,即动态链接库(Dynamic Link Library),是Windows操作系统中的一种关键组件,它允许不同程序共享同一段代码和数据,从而节省内存、简化系统升级和跨语言交互。本教程将带你深入了解DLL的基本概念、主要优势及...
**DLL(动态链接库)入门教程** DLL(Dynamic Link Library)是Windows操作系统中的一种共享库机制,它允许多个应用程序共享同一段代码或数据,从而节省内存资源并方便代码的维护和更新。本教程将通过一个简单的...
DLL(Dynamic Link Library)动态链接库是Windows操作系统中一个核心特性,它允许多个程序共享同一块内存中的代码和数据,从而节省系统资源、提高程序执行效率。本压缩包提供了五个文件,涵盖了DLL的基础知识和在MFC...
#### DLL入门基本步骤详解 动态链接库(Dynamic Link Library,简称DLL)是Windows系统中一种重要的共享库形式,它可以被多个应用程序同时加载和使用,极大地提高了资源的利用效率。对于想要深入了解DLL但又不知道...
本压缩包包含了一系列的DLL学习示例,非常适合初学者入门。 DLL有动态加载和静态加载两种方式。动态加载(Dynamic Loading)是指在程序运行时才加载DLL,这样可以减小程序的启动时间,因为不是所有功能都需要一开始...
### C++ DLL 编写入门:理解与实践 #### 前言 随着Windows操作系统的迭代,动态链接库(Dynamic Link Library,简称DLL)成为其不可或缺的组成部分。无论是字体、图标展示,还是用户界面处理,乃至核心API函数,...
1. VC++ 2010开发环境的使用方法:文件中提到了如何使用Visual C++ 2010创建新的Win32项目,并且设置应用程序类型为DLL,这是编写动态链接库(DLL)的基础步骤。 2. DLL的创建和结构:文档中详细描述了创建DLL项目...
### C++ DLL编写入门 #### 一、DLL的重要性与特性 动态链接库(Dynamic Link Library,简称DLL)自微软推出16位Windows操作系统以来,便成为Windows生态系统中不可或缺的一部分。DLL文件承载着丰富的函数和数据,...
【DLL编写入门教程】 DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它是一种动态链接库,允许开发者将代码和数据封装在一起,供多个应用程序共享使用。DLL的优点主要体现在内存管理、软件...
DLL 编写教程 Windows 中 DLL 的编写入门手册 本资源为 Windows 中 DLL 的编写入门手册,详细讲述了如何编写 DLL。DLL(Dynamic Link Library)是一种软件组件,即动态链接库,是一种可被多个应用程序共享的库文件...
C++进行DLL编程入门 一、C++中的DLL编程入门 在C++中,DLL(Dynamic Link Library)是一种非常重要的编程技术,允许开发者将代码封装到一个库文件中,然后在其他应用程序中使用。下面将详细介绍如何使用C++进行DLL...
【C++ DLL 编写入门】 DLL(Dynamic Link Library)是Windows操作系统中广泛使用的一种库文件格式,它允许多个应用程序共享代码和资源,从而优化内存使用和提高软件开发效率。DLL文件包含了函数、类和资源,可以被...