[00001]-[2015-06-22]-[01]-[MFC动态链接库相关编程]

MFC动态链接库的创建与访问

【创建】新建工程MFC AppWizard(dll) 注意FileView视图中的[dll.cpp]和[dll.def]文件

  【dll.cpp】 用于实现大部分的功能的文件

  【dll.def】

      ---------------------------------------------------------------------

      ; 动态链接库1.def : Declares the module parameters for the DLL.

      LIBRARY "动态链接库1"
      DESCRIPTION ‘动态链接库1 Windows Dynamic Link Library‘

      EXPORTS
        ; Explicit exports can go here 用于声明要导出的函数
        ShowDlg;
        GetBmpResourceFromDll;
        CreateSkinObj;
        ReleaseSkinObj;

      ---------------------------------------------------------------------

【访问】新建一个工程设计应用程序来访问上个DLL工程产生的dll库文件

    class CSkin
    {
    public:
    virtual HBITMAP GetBMP() = 0;
    };

    typedef VOID (_stdcall *pFun)();
    typedef HBITMAP (_stdcall *pFunGetBmp)();
    // CSkin* _stdcall CreateSkinObj()
    typedef CSkin* (_stdcall *funCreateSkinObj)();
    // void _stdcall ReleaseSkinObj(CSkin* pSkin)
    typedef void (_stdcall *funReleaseSkinObj)(CSkin* pSkin);

    HMODULE hModule = LoadLibrary("F:\\项目(进行)\\VC++项目\\VC++典型模块设计\\动态链接库1\\Debug\\动态链接库1.dll");

    funCreateSkinObj CreateSkin;
    funReleaseSkinObj ReleaseSkin;

    if(hModule)
    {
      CreateSkin = (funCreateSkinObj)GetProcAddress(hModule, "CreateSkinObj");
      ReleaseSkin = (funReleaseSkinObj)GetProcAddress(hModule, "ReleaseSkinObj");

      CSkin* pSkin = CreateSkin();

      CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC); 
      pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE); 
      pStatic->SetBitmap(pSkin->GetBMP());
      ReleaseSkin(pSkin);
    }

    FreeLibrary(hModule);

需要掌握的技巧

向动态链接库中添加资源(BMP)同时在应用程序访问dll中的资源

向动态连接库中添加C++类,同时在应用程序中访问dll中的C++类调用方法。。。。

Note: 在向动态链接库中添加类时,如果应用程序需要访问类中的方法,则该方法一定是虚方法,否则应用程序将无法访问动态链接库中的类的方法

   为了方便在应用程序中更好的调用dll中定义的类, 我们需要在应用程序工程中定义与dll工程中定义的类相同的类----->设置为抽象类

【抽象类】 该类不能有对象(实例),唯一的作用就是在于被继承, 一个抽象类至少有一个纯虚函数(没有任何具体实现的虚函数)

      抽象类是一种特殊的类,不能定义对象,作用是用来组织一个继承的层次结构,由他提供一个公共的根(基类),派生其他子类

时间: 2024-10-07 20:41:40

[00001]-[2015-06-22]-[01]-[MFC动态链接库相关编程]的相关文章

周三(2015.7.22)学习内容

周三(2015.7.22)学习内容: 一.计算机程序是什么? 就是为了解决某一个问题而编写的一系列有序指令的集合. 二.Java的相关技术有哪些? JavaSE(桌面应用程序)  JavaEE(网站)  JavaME(手机应用),现在已被Android取代 三.开发Java程序的步骤有哪些? 首先编写,接着编译,然后运行. 编写一个Java程序的详细步骤 1.配置环境变量 (1).首先对我的电脑点击右键→属性→高级系统设置→环境变量→系统变量,在系统变量中查找有没有名称为path的变量名,如果有

MFC 状态栏相关使用(CStatusBar & CStatusBarCtrl)

原文:MFC 状态栏相关使用(CStatusBar & CStatusBarCtrl),沙漠紫风铃 本文介绍了MFC中和状态栏相关的用法: 在MFC的的单文档应用中,在建好应用程序之后,CMainFrame类中定义了状态栏对象CStatusBar  m_wndStatusBar; 而在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数中做了状态栏的创建,代码如下: if (!m_wndStatusBar.Create(this) |

豪迪QQ群发器2015.1.22破解版by小众论坛

软件名称:豪迪QQ群发器2015.1.22破解版 软件介绍:最新的版本破解,一个众所周知的群发QQ消息的软件.更新是针对QQ的更新而更新的 测试截图: <ignore_js_op> <ignore_js_op> 破解说明:1.小众论坛下载解压豪迪QQ群发器2015.1.22破解版2.运行 豪迪QQ群发器2015.1.22破解版.exe3.点击小众论坛启动 豪迪QQ群发器2015.1.22破解版下载: http://www.xzrj.cc/thread-42321-1-1.html

MFC File相关命令流程分析

一个APP可以有多个文档模板,一个文档模板可以有多个文档(Document),一个Document可以有多个View.在程序.要在程序中添加新的文档模板可以如下所示: CSingleDocTemplate*pDocTemplate; pDocTemplate = newCSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CmfcArchiveDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_

MFC下DLL编程(图解)

DLL(Dynamic Link Library,动态链接库)是微软公司为Windows和OS/2操作系统设计一种供应用程序在运行时调用的共享函数库.DLL是应用程序的一种扩展,也是软件共享和重用的传统方法. DLL除了可同时被多个应用程序共享外,还可以在不改变调用接口(从而不需修改使用它的应用程序)的情况下,改进和升级里面的库函数.而且DLL与编写它的语言无关,例如,用VC生成的规则DLL,可以被VB.Delphi等生成的应用程序使用. DLL可以用多种语言和工具编写,我们这里只介绍如何使用M

《转载》 cpp文件调用CUDA .cu文件实现显卡加速相关编程

转自:   http://m.blog.csdn.net/blog/oHanTanYanYing/39855829 本篇文章谈的是cpp文件如何调用CUDA的.cu文件实现显卡加速的相关编程.当然,这是在默认已经配置好CUDA的情况下进行的,如果对于如何配置CUDA还有疑问可以看之前写的这一篇文章.另外,现在CUDA已经放出了支持VS2013的6.5版本,所以还是建议用最新的,毕竟VS2013好用太多,配置起来也没什么区别.关于那篇配置文章,并没有解决CUDA相关函数偶有错误提示的问题,虽然对于

MFC下CSocket编程详解

MFC下CSocket编程详解 分类: C/C++2008-03-13 09:01 34465人阅读 评论(34) 收藏 举报 mfc编程socket服务器socketsstream MFC下CSocket编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN): CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket::Socket 初始化) CSocket::Socket初始化 CSocket::SetSockOpt 设置socket

VC++动态链接库(DLL)编程深入浅出(zz)

1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了"无库-静态链接库-动态链接库"的时代. 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了.但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以"动态"地引用和卸载这个与E

b0.0 MFC应用程序编程

MFC应用程序编程 MFC的发展 VC5.0 -->VC6.0 -->VS2008 Sp1 --> VS2010 含义(存之根本) MFC:微软基础类库    采用类的方式,将Win32 API等进行封装,形成的库 属性(存之方式) MFC相关的头文件    afx.h    (application framework, X,x比较神秘,比喻强大的意思)    afxwin.h  (类似于windows.h)    afxext.h  (MFC扩展头文件) ... 分类(存之类型) 1