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++开发交流

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/woniu201/p/11694603.html
Copyright © 2011-2022 走看看