VC++动态链接库技术(win32)

如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中。

概述

DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类。

仓库的发展史经历了”无库” —> “静态链接库” —> “动态链接库”。

静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,EXE文件执行时动态加载和卸载dll文件。

C/C++/MFC开发技术交流欢迎加群:343632361,我们在这里一起讨论开发技术,一起进步一起成长。

库的分类

1.Win32库(非MFC)库

Win32库又分为:动态链接库和静态链接库

Win32库不采用MFC类库结构,导出函数为标准的C接口,可以被MFC或非MFC编写的应用程序调用。

2.MFC库

MFC库又分为:MFC规则DLL和MFC扩展DLL

MFC规则DLL:包含一个集成自CWinApp的类,但其无消息循环。

MFC扩展DLL:采用MFC的动态链接库创建,它只能被MFC编写的应用程序调用。

创建Win32动态链接库

使用vs2010进行创建

1.“新建项目” 项目名为”wn32dll”—>选择”Win32项目” —>下一步 勾选 “Dll”和”导出符号”如下图:

VC++动态链接库技术(win32)

wn32dll.cpp添加自定义函数:

// wn32dll.cpp : 定义 DLL 应用程序的导出函数。

//

#include “stdafx.h”

#include “wn32dll.h”

// 这是导出变量的一个示例

WN32DLL_API int nwn32dll=0;

// 这是导出函数的一个示例。

WN32DLL_API int fnwn32dll(void)

{

return 42;

}

// 这是已导出类的构造函数。

// 有关类定义的信息,请参阅 wn32dll.h

Cwn32dll::Cwn32dll()

{

return;

}

/*************自定义函数******************/

WN32DLL_API int WN_Add(int a, int b)

{

return a + b;

}

wn32dll.h中对声明自定义的函数

// 下列 ifdef 块是创建使从 DLL 导出更简单的

// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 WN32DLL_EXPORTS

// 符号编译的。在使用此 DLL 的

// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将

// WN32DLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的

// 符号视为是被导出的。

#ifdef WN32DLL_EXPORTS

#define WN32DLL_API __declspec(dllexport)

#else

#define WN32DLL_API __declspec(dllimport)

#endif

// 此类是从 wn32dll.dll 导出的

class WN32DLL_API Cwn32dll {

public:

Cwn32dll(void);

// TODO: 在此添加您的方法。

};

extern WN32DLL_API int nwn32dll;

WN32DLL_API int fnwn32dll(void);

//******************自定义函数**********************/

WN32DLL_API int WN_Add(int a, int b);

编译该项目,会在Debug目录中生成wn32dll.dll和wn32dll.lib文件,使用Dependency Walker工具查看是否成功

VC++动态链接库技术(win32)

调用Win32动态链接库

鼠标在解决方案右击 —> “添加” —> “新建项目”,项目名称为”dllTest”,选择win32控制台项目

在dllTest.cpp源文件中添加如下代码:

// dllTest.cpp : 定义控制台应用程序的入口点。

//

#include “stdafx.h”

#include “../wn32dll/wn32dll.h”

#ifdef _DEBUG

#pragma comment(lib, “../Debug/wn32dll.lib”)

#else

#pragma comment(lib, “../Release/wn32dll.lib”)

#endif

int _tmain(int argc, _TCHAR* argv[])

{

int result = WN_Add(1, 5);

printf(“result = %d\n”, result);

getchar();

return 0;

}

编译连接生成dllTest.exe文件,执行结果如下:

VC++动态链接库技术(win32)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/83533.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信