zoukankan      html  css  js  c++  java
  • Windows核心编程——MFC DLL

    1.MFC DLL

     在DLL中使用MFC框架

    1)规则DLL(MFC静态库版本和MFC动态库版本)
    dll的接口是标准的接口,可以给SDK使用,也可也给MFC使用。

           loadicon
           loadmenu
           loadimage
           loadcursor
           LoadAccelerators

    这些都是加载资源的api,为何第一个都是实例句柄(模块在进程基址空间首地址)?

    当一个进程启动时:存在exe和dll代码,这些代码从哪里来呢?

      是来自于磁盘上的exe和dll,这些进程还会加载各种资源,资源也是在dll的地址空间中,也是来自于磁盘上的exe,编译时都会编译至磁盘的exe或dll里面。当exe启动时,磁盘的exe或dll都会“拷贝”至进程的exe和dll里边,在进程需要加载资源时,exe和dll可能都有资源,为了区分加载的是exe还是某个dl,所以需要实例句柄(模块基质)来区分。

    使用Dll的任何资源之前要设置模块句柄
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

     

    生成dll时需导出

     

     控制台使用共享dll:

    void MyShowDialog();
    #pragma comment(lib, "..\debug\regulardllshared.lib")
    
    int main()
    {
        MyShowDialog();
        return 0;
    }
    

     
    MFC中使用共享dll

    添加按钮后:

    void MyShowDialog();
    #pragma comment(lib, "..\debug\regulardllshared.lib")
    
    void CMFCUseDllDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        MyShowDialog();
        
    }
    

     
    再按钮中可以使用dll

    2.静态加载Dll

     注意:动态dll需要句柄:AFX_MANAGE_STATE(AfxGetStaticModuleState());
       静态不需要

     静态

     

    动态

    为什么动态加载dll需要切句柄呢?

     

     
         我们来看这两个dll,静态dll大小远大于动态dll,而且大很多,为什么大呢?
    由于静态dll用的是mfc静态库,mfc整个框架代码都进了dll里面。所以静态库的初始化已经再框架中做好,但是动态dll没有初始化,所以需要手动添加句柄去切换

    3)扩展dll
        导出mfc类,给mfc工程使用
        
        使用mfc dll创建
         加上导出宏:AFX_EXT_CLASS

     使用dll:

    #include "..\ExternDll\MyEdit.h"
    #pragma comment(lib, "..\debug\externdll.lib")dll需要切句柄呢?
    

    注意:使用dll,字符集一致, 都是用共享mfc dll链接的方式。(库要一致)   
    一般直接用静态dll,让别人用着比较方便。扩展dll一般用动态

  • 相关阅读:
    下载文档时Safari浏览器下载后出现".html"问题
    实体框架(Entity Frmaework)简介
    系统内置委托:Func/Action
    lambda表达式不使用委托(delegate) 用FUNC
    lambda表达式
    C#生成缩略图 (通用模式)
    从底层角度看ASP.NET-A low-level Look at the ASP.NET...
    网站前端优化
    HTTP协议
    什么是AJAX? AJAX:”Asynchronous JavaScript and XML”中文意思:异步JavaScript和XML。
  • 原文地址:https://www.cnblogs.com/zhaoyixiang/p/12966287.html
Copyright © 2011-2022 走看看