`
conkeyn
  • 浏览: 1523739 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

MFC规则DLL 简单的例子

阅读更多

这个DLL的例子(属于静态链接到MFC 的规则DLL)中提供了一个如图11所示的对话框。
(下载本工程附件 ):

图11 MFC规则DLL例子

  在DLL中添加对话框的方式与在MFC应用程序中是一样的。

  在图11所示DLL中的对话框的Hello按钮上点击时将MessageBox一个“Hello,pconline的网友”对话框,下面是相关的文件及源代码,其中删除了MFC向导自动生成的绝大多数注释。
第一组文件:CWinApp继承类的声明与实现

// RegularDll.h : main header file for the REGULARDLL DLL



#if !defined(AFX_REGULARDLL_H__3E9CB22B_588B_4388_B778_B3416ADB79B3__INCLUDED_)

#define AFX_REGULARDLL_H__3E9CB22B_588B_4388_B778_B3416ADB79B3__INCLUDED_



#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000



#ifndef __AFXWIN_H__

#error include 'stdafx.h' before including this file for PCH

#endif

#include "resource.h" // main symbols



class CRegularDllApp : public CWinApp

{

public:

CRegularDllApp();



DECLARE_MESSAGE_MAP()

};

#endif



// RegularDll.cpp : Defines the initialization routines for the DLL.



#include "stdafx.h"

#include "RegularDll.h"



#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif



BEGIN_MESSAGE_MAP(CRegularDllApp, CWinApp)

END_MESSAGE_MAP()



/////////////////////////////////////////////////////////////////////////////

// CRegularDllApp construction



CRegularDllApp::CRegularDllApp()

{

}



/////////////////////////////////////////////////////////////////////////////

// The one and only CRegularDllApp object

CRegularDllApp theApp;


  分析:

  在这一组文件中定义了一个继承自CWinApp的类CRegularDllApp,并同时定义了其的一个实 例theApp。乍一看,您会以为它是一个MFC应用程序,因为MFC应用程序也包含这样的在工程名后添加“App”组成类名的类(并继承自 CWinApp类),也定义了这个类的一个全局实例theApp。
我们知道,在MFC应用程序中CWinApp取代了SDK程序中WinMain的地位,SDK程序WinMain所完成的工作由CWinApp的三个函数完成:

virtual BOOL InitApplication( );

virtual BOOL InitInstance( );

virtual BOOL Run( ); //传说中MFC程序的“活水源头”


  但是MFC规则DLL并不是MFC应用程序,它所继承自CWinApp的类不包含消息循环。这是因为,MFC规则DLL不包含 CWinApp::Run机制,主消息泵仍然由应用程序拥有。如果DLL 生成无模式对话框或有自己的主框架窗口,则应用程序的主消息泵必须调用从DLL 导出的函数来调用PreTranslateMessage成员函数。

  另外,MFC规则DLL与MFC 应用程序中一样,需要将所有 DLL中元素的初始化放到InitInstance 成员函数中。

  第二组文件 自定义对话框类声明及实现(点击查看附件 )

  分析:

  这一部分的编程与一般的应用程序根本没有什么不同,我们照样可以利用MFC类向导来自动为对话框上的控件添加事件。MFC类向导照样会生成类似ON_BN_CLICKED(IDC_HELLO_BUTTON, OnHelloButton)的消息映射宏。

  第三组文件 DLL中的资源文件

//{{NO_DEPENDENCIES}}

// Microsoft Developer Studio generated include file.

// Used by RegularDll.rc

//

#define IDD_DLL_DIALOG 1000

#define IDC_HELLO_BUTTON 1000


  分析:

  在MFC规则DLL中使用资源也与在MFC应用程序中使用资源没有什么不同,我们照样可以用Visual C++的资源编辑工具进行资源的添加、删除和属性的更改。

  第四组文件 MFC规则DLL接口函数

#include "StdAfx.h"

#include "DllDialog.h"


extern "C" __declspec(dllexport) void ShowDlg(void)

{

CDllDialog dllDialog;

dllDialog.DoModal();

}


  分析:

  这个接口并不使用MFC,但是在其中却可以调用MFC扩展类CdllDialog的函数,这体现了“规则”的概类。

  与非MFC DLL完全相同,我们可以使用__declspec(dllexport)声明或在.def中引出的方式导出MFC规则DLL中的接口。

 

http://www.cppblog.com/ivenher/articles/1321.html

分享到:
评论

相关推荐

    MFC规则DLL(详细介绍dll)

    一个简单的MFC规则DLL的例子可以提供一个对话框,用户可以在对话框中点击按钮时弹出提示信息。在DLL中添加对话框的方式与在MFC应用程序中是一样的。 MFC规则DLL是指在VC++环境下使用MFC框架编写的动态链接库,它...

    MFC规则Regular DLL 例子源码

    **MFC(Microsoft Foundation Class)规则DLL例子源码解析** MFC,全称为Microsoft Foundation Classes,是微软提供的一套C++类库,用于简化Windows API的编程,它基于面向对象的编程思想,使得Windows应用程序开发...

    MFC规则DLL的创建和使用技巧

    本资源包含一个doc--详细地讲述MFC规则DLL的创建与使用技巧。并附带三个例子的源码。通过本资源学习DLL,举一反三就能很好的掌握DLL的创建和使用了……O(∩_∩)O~ Regular DLL能够被所有支持DLL技术的语言所编写的...

    规则mfc dll使用的一个例子( 本dll可以创建对话框)

    本示例中的"规则MFC DLL"是一种特别设计的动态链接库,它允许在运行时被其他应用程序加载和调用,用于创建和管理对话框。对话框在Windows程序中经常用于与用户进行交互,展示信息或收集输入数据。 创建MFC DLL的...

    VS2019 MFC DLL共享动态链接库(MFC 常规库)封装例程非模态调用例程。(里面包含MFC 扩展库何规则库两个例程)

    在这个例子中,"MFCLibrary2"可能是一个MFC扩展DLL,因为它提供了一个更灵活的方式,允许在DLL和调用应用程序之间创建和管理对象。 创建MFC DLL的步骤如下: 1. **启动新项目**:在VS2019中,选择“新建项目”,...

    MFCDllLearn.rar MFC动态库例子

    学习共享MFC DLL 的规则 DLL 的模块切换,共有3种方式: 方式一:在 DLL 接口函数中使用使用 AFX_MANAGE_STATE(AfxGetStaticModuleState()) 方式二:在 DLL 接口函数中使用使用 AfxGetResourceHandle() ...

    将扩展dll转为共享规则dll方法

    ### 将扩展DLL转为共享规则DLL的方法 #### 概述 在软件开发过程中,动态链接库(Dynamic Link Library,简称DLL)是非常重要的组件之一,它可以在多个应用程序之间共享代码和资源。通常情况下,DLL可以分为扩展DLL...

    有关DLL的教材

    Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。 (1)非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或...

    MFCDLL的生成和调用实例[参照].pdf

    在项目命名中输入"OneDLL",指定存放路径,接着在“DLL类型”中选择“使用共享MFC DLL的规则DLL”,最后点击“完成”。这将生成必要的文件,包括"OneDLL.cpp"和"OneDLL.def"。 "OneDLL.cpp"文件是DLL的核心源代码,...

    Python中调用C++dll例子

    在Python编程中,有时我们需要利用已有的C++库或者DLL(动态链接库)来扩展功能,这通常通过Python的`ctypes`模块实现。`ctypes`是Python的一个标准库,它允许我们直接调用C语言编译的动态链接库,从而实现了Python...

    dll动态连接库例子

    dll动态连接库例子 mfc规则和非规则 动态库创建和调用

    SingDocRglDll_dll中封装MFC_Vc_

    总的来说,"SingDocRglDll_dll中封装MFC_Vc_"的实现涉及了使用Visual C++和MFC来创建动态链接库,该库可能包含文档处理、规则执行或其他业务逻辑。这种设计使得代码复用更加高效,同时也提高了软件的可维护性和扩展...

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

    - **MFC Regular DLL**:MFC规则DLL包含一个继承自`CWinApp`的类,但没有自己的消息循环机制。 - **MFC Extension DLL**:MFC扩展DLL基于MFC的动态链接版本创建,只能被MFC类库编写的应用程序调用。 #### 3. 静态...

    DLL编程深入浅出

    - **MFC Regular DLL(MFC规则DLL)**:包含一个继承自`CWinApp`的类,但没有自己的消息循环,主要用于MFC应用程序之间的数据交换。 - **MFC Extension DLL(MFC扩展DLL)**:使用MFC的动态链接版本创建,只能被MFC...

    MFC深入浅出带目录完整版(李久进chm版)

    并且进一步阐述MFC的核心概念之一:状态(模块状态、线程状态、模块线程状态),揭示MFC对多线程的支持机制,MFC实现规则DLL和扩展DLL的内幕。 第十章,阐述MFC下的调试手段。 第十一章,讨论CFile类,主要分析了...

Global site tag (gtag.js) - Google Analytics