zoukankan      html  css  js  c++  java
  • 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,添加如下代码:

    #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

    源文件wnMFCdll.cpp 添加如下代码:

    // wnMFCdll.cpp : 定义 DLL 的初始化例程。
    //
    
    #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文件中添加如下内容:

    ; wnMFCdll.def : 声明 DLL 的模块参数。
    
    LIBRARY
    
    EXPORTS
        ; 此处可以是显式导出
    	WN_SetAge
    	WN_SetName
    	WN_Printf

    编译该项目,会在Debug目录下生成wnMFCdll.dll和wnMFCdll.lib两个文件

    调用MFC动态链接库

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

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

    // wnMFCTest.cpp : 定义控制台应用程序的入口点。
    //
    
    #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文件,执行结果如下:

    欢迎加群交流:C/C++开发交流

  • 相关阅读:
    擦边上100分,我的托福考试总结
    如何写Java文档注释(Java Doc Comments)
    EC读书笔记系列之6:条款11 在operator=中处理自我赋值
    Python核心编程读笔 1
    安装Ubuntu小计
    U盘安装win7+CentOS7双系统
    EC读书笔记系列之5:条款9、条款10
    EC读书笔记系列之4:条款8 别让异常逃离析构函数
    EC读书笔记系列之3:条款5、条款6、条款7
    EC读书笔记系列之2:条款4 确定对象被使用前已先被初始化
  • 原文地址:https://www.cnblogs.com/woniu201/p/11694603.html
Copyright © 2011-2022 走看看