MFC DLL导出对话框问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC DLL导出对话框问题相关的知识,希望对你有一定的参考价值。

代码如下:
1)导出类:
#pragma once
#include "afx.h"
#include "afxcmn.h"
#include "DlgSystemRoom.h"
#include "DlgSystemTable.h"
#include "../Dynamiclibrary/SystemDeployDLL/Resource.h"
#include <vector>

using namespace std;

// CDlgSystemDeploy 对话框

class AFX_EXT_CLASS CDlgSystemDeploy : public CDialogEx

DECLARE_DYNAMIC(CDlgSystemDeploy)
public:
CDlgSystemDeploy(CWnd* pParent = NULL); // 标准构造函数
virtual ~CDlgSystemDeploy();

// 对话框数据
enum IDD = IDD_DLG_SYSTEM_DEPLOY ;

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

DECLARE_MESSAGE_MAP()
public:
CListCtrl m_listRoom; //餐厅列表
CListCtrl m_listTable; //餐桌列表
CDlgSystemRoom m_dlgRoom; //房间信息页面
CDlgSystemTable m_dlgTable; //餐桌信息页面
POSITION m_posRoom; //当前操作房间句柄
CString m_strPath; //当前操作餐厅路径
vector<CString> m_vRoomPath; //餐桌文件路径
virtual BOOL OnInitDialog();
virtual void OnCancel();
afx_msg void OnBnClickedBtnRoomAdd();
afx_msg void OnBnClickedBtnRoomChange();
afx_msg void OnBnClickedBtnRoomDelete();
afx_msg void OnNMClickListSystemRoom(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnBnClickedBtnTableAdd();
afx_msg void OnBnClickedBtnTableChange();
afx_msg void OnBnClickedBtnTableDelete();
afx_msg void OnNMClickListSystemTable(NMHDR *pNMHDR, LRESULT *pResult);
;
同样的导出对话框类还有3个

在应用程序中调用如下:
if (m_pSystem == NULL)

AFX_MANAGE_STATE(AfxGetStaticModuleState());
m_pSystem = new CDlgSystemDeploy();
m_pSystem->Create(CDlgSystemDeploy::IDD, this);


出现问题:

DLL设置:

把AFX_MANAGE_STATE(AfxGetStaticModuleState());去掉试试,你用的是不是MFC扩展类型的DLL。 参考技术A 你这个是debug错误,代表对话框没有获取到资源文件,因为你的资源文件是在dll里定义的。解决办法是,先在dll里create好dlg指针,再导从dll接口导出,确保资源被正确加载。

从 mfc 扩展 dll 导出的无模式对话框不显示

【中文标题】从 mfc 扩展 dll 导出的无模式对话框不显示【英文标题】:modaless dialog export from mfc extension dll not show 【发布时间】:2018-09-22 00:58:28 【问题描述】:

我已经构建了以下配置:

1) 带有对话框 A(类 MultipleTextBox)的 MFC 扩展 dll

2) MFC 应用程序有对话框 B。(对话框 A 作为对话框 B 的子级)

对话框 B 在头文件中声明对话框 A 的实例:

private:
    MultipleTextBox* m_pTextBox;

在对话框 B 的 OnInitDialog 函数中:

m_pTextBox->CreateDlg(MultipleTextBox::IDD, this);
m_pTextBox->ShowWindow(SW_SHOW);
m_pTextBox->MoveWindow(0, 0, 200, 200);

但对话框 A 在应用程序运行时不显示。

【问题讨论】:

【参考方案1】:

这很可能是由于缺少调用

AFX_MANAGE_STATE(AfxGetStaticModuleState());

调用上述函数,然后对话框将显示在您的应用程序中。

【讨论】:

以上是关于MFC DLL导出对话框问题的主要内容,如果未能解决你的问题,请参考以下文章

mfc通过调用dll文件弹出对话框时出现中断

MFC DLL的GUI工具?

创建共享 MFC 对话框:常规 DLL 或 MFC 扩展 DLL

主窗口作为无模式对话框的 MFC 应用程序

从另一个 DLL 加载 MFC 应用程序对话框

从 .NET C# DLL 更新 MFC 对话框中的进度条