• DLL 学习1


    一、孙鑫老师的讲解

    资料:http://www.pconline.com.cn/pcedu/empolder/gj/vc/0607/820674.html

     

    二、动态链接库的使用

    1)静态使用

    1在工程中加入静态库,有两种方法:

    方法一:项目设置中引用.lib,project-setting-link-object/library modules中添加.lib;(需要在tools/options设置正确的引用路径)

    image

    方法二:在项目中直接加入lib,project-add to project-files,选择正确的.lib。

    2在工程中包括.h文件;(可能 需要在tools/options设置正确的引用路径)

    3在工程中使用静态库中的函数.

    2)动态使用

     

    三、MFC库支持的DLL

    MFC库支持两种DLL:扩展DLL和正规的DLL。

          扩展DLL动态链接到MFC库的DLL版本的代码,因此,扩展DLL要求客户程序被动态链接到MFC库,并且客户程序和扩展DLL要一致链接到MFCDLL的相同版本。扩展DLL可以导出整个类。

          正规DLL可以被任何编程环境装载,应该使用正规DLL。正规DLL可以导出C风格的函数,不能导出C++类。但,我们可以再内部使用C++类(特别是MFC库的类)。正规DLL可以选择静态链接和动态链接两种方式。

     

    扩展DLL需要注意的事情:

    1.必须把宏AFX_EXT_CLASS加到导出类声明中,如:

    class AFX_EXT_CLASS CStudnet :public CObject

        对DLL工程中的H要修改,客户程序使用的H文件也一样要修改。

    2.搜索顺序

    EXE文件--扩展DLL--MFCDLL。如果资源ID在所有资源中式唯一的,MFC库将找到该资源。如果有重复的,将装入EXE资源。

    搜索顺序的改变:

    HINSTANCE hInstResourceClient = AfxGetResourceHandle();

    AfxSetResourceHandle(::GetModuleHandle("mydllname.dll"));

    CString strRes;

    strRes.LoadString(IDS_MYSTRING);

    AfxSetResourceHandle(hInstResourceClient);

    扩展DLL使用:因为能导出整个类,所以可以直接使用。向使用自己的类一样。

     

    正规DLL需要注意的事项:

    1.使用AFX_MANAGE_STATE宏,如果使用静态链接可以不用。因为如果从一个正规MFC DLL中调用进入mfc42.dll,全局变量不同步,所以后果不可预知。需要在所有导出函数的开始处,加入

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    2.EXE资源函数装载自己的资源,DLL资源函数装载DLL自己的资源。exe想要装载DLL资源,可使用AfxGetResourceHandle进行改变。

  • 相关阅读:
    [LeetCode] Add Two Numbers
    [LeetCode] Two Sum
    解决 wget 使用 https 下载报错的问题
    VMware Player 使用笔记
    使用 linux 作为桌面系统会遇到的一些小问题和解决方案
    CUDA 6.5 + Visual Studio 2013 Express 环境配置
    康威生命游戏(Conway's Game of Life)的一种实现
    微软校招编程题"Beautiful String"的状态机解法
    利用html5的本地存储写的一个购物车
    微信开发asp.net
  • 原文地址:https://www.cnblogs.com/meetcomet/p/1587922.html
Copyright © 2020-2023  润新知