`

Dll入门

 
阅读更多

     有一些东西是一定要动手实现的,学习有的点可以慢慢积累,但是有一些基本的盲区是一定不要跨过去的。

 

     这里不过多的讲解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入门”的PDF、Word版文档以及源码,是学习DLL编程的理想资源。 首先,我们需要了解DLL的基本概念。DLL文件实质上是包含了一组函数和数据的库,这些函数和数据可以在运行时被多个程序共享。通过...

    免分的,DLL入门例子,大家帮顶

    首先,我们来看标题"免分的,DLL入门例子,大家帮顶"。这表明这是一个关于DLL基础的教程,作者可能是为了帮助初学者而分享的一个免收费的资源。"大家帮顶"是网络用语,意思是希望社区成员能支持和推广这个教程。 ...

    VC编写dll入门,适合刚学习dll的朋友看

    ### VC编写DLL入门详解 #### 一、概述 动态链接库(Dynamic Link Library,简称DLL)是一种可被多个程序同时使用的文件,它提供了一种有效的方法来共享代码和资源。DLL 文件包含可供程序调用的功能,如绘图例程、...

    VC++,MFC,DLL入门资料

    在"VC MFC DLL 入门资料"中,你可能会学到以下知识点: 1. **VC++集成开发环境的使用**:如何创建新项目、添加源文件、设置编译选项、调试程序等基本操作。 2. **MFC基础**:MFC架构的介绍,包括主要的类和它们的...

    lib和dll入门小例子

    LIB和dll入门实例,简单明了,现学现用

    VC MFC DLL 入门资料 VC MFC DLL 入门资料

    DLL(Dynamic Link Library)则是Windows操作系统中的一种共享库机制,它允许多个程序共享同一段代码和数据,从而节省内存并提高程序间的交互性。本篇文章将深入探讨在VC++环境下使用MFC进行DLL开发的基础知识。 1....

    dll入门课

    在“dll入门课”中,我们将会深入探讨以下关键知识点: 1. **DLL的基本概念**:了解DLL是什么,它的作用以及为什么在Windows平台上广泛使用。DLL文件包含了函数定义、资源和数据,允许不同程序之间共享这些功能,而...

    Dll编写教程Dll入门必读

    DLL,即动态链接库(Dynamic Link Library),是Windows操作系统中的一种关键组件,它允许不同程序共享同一段代码和数据,从而节省内存、简化系统升级和跨语言交互。本教程将带你深入了解DLL的基本概念、主要优势及...

    DLL入门例子

    **DLL(动态链接库)入门教程** DLL(Dynamic Link Library)是Windows操作系统中的一种共享库机制,它允许多个应用程序共享同一段代码或数据,从而节省内存资源并方便代码的维护和更新。本教程将通过一个简单的...

    DLL动态链接库编程入门(5文件)

    DLL(Dynamic Link Library)动态链接库是Windows操作系统中一个核心特性,它允许多个程序共享同一块内存中的代码和数据,从而节省系统资源、提高程序执行效率。本压缩包提供了五个文件,涵盖了DLL的基础知识和在MFC...

    跟我学习DLL(入门必备)

    #### DLL入门基本步骤详解 动态链接库(Dynamic Link Library,简称DLL)是Windows系统中一种重要的共享库形式,它可以被多个应用程序同时加载和使用,极大地提高了资源的利用效率。对于想要深入了解DLL但又不知道...

    DLL 学习例子,很适合初学者

    本压缩包包含了一系列的DLL学习示例,非常适合初学者入门。 DLL有动态加载和静态加载两种方式。动态加载(Dynamic Loading)是指在程序运行时才加载DLL,这样可以减小程序的启动时间,因为不是所有功能都需要一开始...

    C++Dll编写入门

    ### C++ DLL 编写入门:理解与实践 #### 前言 随着Windows操作系统的迭代,动态链接库(Dynamic Link Library,简称DLL)成为其不可或缺的组成部分。无论是字体、图标展示,还是用户界面处理,乃至核心API函数,...

    图文手把手教你一步步用VC 2010编写通达信缠论插件(1-DLL设计入门).pdf

    1. VC++ 2010开发环境的使用方法:文件中提到了如何使用Visual C++ 2010创建新的Win32项目,并且设置应用程序类型为DLL,这是编写动态链接库(DLL)的基础步骤。 2. DLL的创建和结构:文档中详细描述了创建DLL项目...

    C++ dll编写入门

    ### C++ DLL编写入门 #### 一、DLL的重要性与特性 动态链接库(Dynamic Link Library,简称DLL)自微软推出16位Windows操作系统以来,便成为Windows生态系统中不可或缺的一部分。DLL文件承载着丰富的函数和数据,...

    DLL编写入门教程

    【DLL编写入门教程】 DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它是一种动态链接库,允许开发者将代码和数据封装在一起,供多个应用程序共享使用。DLL的优点主要体现在内存管理、软件...

    DLL编写教程 windows中dll的编写入门手册

    DLL 编写教程 Windows 中 DLL 的编写入门手册 本资源为 Windows 中 DLL 的编写入门手册,详细讲述了如何编写 DLL。DLL(Dynamic Link Library)是一种软件组件,即动态链接库,是一种可被多个应用程序共享的库文件...

    用C++进行DLL编程入门

    C++进行DLL编程入门 一、C++中的DLL编程入门 在C++中,DLL(Dynamic Link Library)是一种非常重要的编程技术,允许开发者将代码封装到一个库文件中,然后在其他应用程序中使用。下面将详细介绍如何使用C++进行DLL...

    C++ Dll 编写入门

    【C++ DLL 编写入门】 DLL(Dynamic Link Library)是Windows操作系统中广泛使用的一种库文件格式,它允许多个应用程序共享代码和资源,从而优化内存使用和提高软件开发效率。DLL文件包含了函数、类和资源,可以被...

Global site tag (gtag.js) - Google Analytics