vc++-创建,调用MFC动态链接库(扩展DLL)

概述

DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类。 仓库的发展史经历了”无库” —> “静态链接库” —> “动态链接库”。 静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,EXE文件执行时动态加载和卸载dll文件。

库的分类

1.Win32库(非MFC)库 Win32库又分为:动态链接库和静态链接库 Win32库不采用MFC类库结构,导出函数为标准的C接口,可以被MFC或非MFC编写的应用程序调用。

2.MFC库 MFC库又分为:MFC规则DLL和MFC扩展DLL MFC规则DLL:包含一个集成自CWinApp的类,但其无消息循环。 MFC扩展DLL:采用MFC的动态链接库创建,它只能被MFC编写的应用程序调用。

创建MFC动态链接库

使用vs2010进行创建

1.“新建项目” 项目名为”wnMFCdll”—>选择”MFC dll” —>选择”MFC 扩展 DLL”,点击完成:

创建头文件wnMFCdll.h,添加如下代码:

1
#ifndef _WNMFCDLL_H #define _WNMFCDLL_H class Student { public: void WN_SetAge(int age); void WN_SetName(char* p); void WN_Printf(); private: int age; char name[32]; }; #endif [/cpp] wnMFCdll.cpp : 定义 DLL 的初始化例程。 [cpp] #include “stdafx.h” #include <stdio.h> #include “wnMFCdll.h” #ifdef _DEBUG #define new DEBUG_NEW #endif void Student::WN_SetAge(int age) { this->age = age; } void Student::WN_SetName(char* p) { strcpy(this->name, p); } void Student::WN_Printf() { printf(“name = %s; age = %d”, name, age); }

在wnMFCdll.def文件中添加如下内容: [cpp] ; wnMFCdll.def : 声明 DLL 的模块参数。 LIBRARY EXPORTS ; 此处可以是显式导出 WN_SetAge WN_SetName WN_Printf [/cpp]

调用MFC动态链接库

鼠标在解决方案右击 —> “添加” —> “新建项目”,项目名称为”wnMFCTest”,选择win32控制台项目,勾选”控制台应用程序”和”MFC”

修改源文件wnMFCTest.cpp内容如下:

1
2
3
4
#include “stdafx.h” #include “wnMFCTest.h” #include “../wnMFCdll/wnMFCdll.h” #ifdef _DEBUG #pragma comment(lib, “../Debug/wnMFCdll.lib”) #define new DEBUG_NEW #endif // 唯一的应用程序对象 
#CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) {
//测试MFC dll //Student
stu(18, “wangpengfei”); Student stu; stu.WN_SetAge(30); stu.WN_SetName(“woniu201”); stu.WN_Printf(); return 0; }

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

  • 版权声明: 本博客所有文章,未经许可,任何单位及个人不得做营利性使用!转载请标明出处!如有侵权请联系作者。
  • Copyrights © 2015-2020 翟天野

请我喝杯咖啡吧~