【求助帖】Win32 DLL项目使用MFC支持问题:在外部程序控件上创建dll中非模态界面失败

DATA_3 2020-05-14 09:56:58
环境:VS2015
程序一(dll):Win32 dll项目 使用MFC支持。带一个对话框界面。
程序二(MFC对话框):有一个CStatic控件,计划将dll界面创建在控件上。
异常情况:创建失败,dll中界面创建处Create直接崩溃:

其他情况:对话框dlg.DoModel()模态形式创建成功!
对话框以非模态形式创建成功,可是界面是弹出的,不是想要的效果。

朋友都建议换成MFC共享DLL形式编写,但我相信微软这个大的公司,这个使用场景应该被考虑到了,所以发帖看看有没有大神知道解决对策的???

Win32 DLL项目设置如下。

导出函数代码如下:

//.h导出
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 TLVISIONMODULE_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// TLVISIONMODULE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef TLVISIONMODULE_EXPORTS
#define TLVISIONMODULE_API __declspec(dllexport)
#else
#define TLVISIONMODULE_API __declspec(dllimport)
#endif

// 此类是从 tlVisionModule.dll 导出的
class TLVISIONMODULE_API CtlVisionModule {
public:
CtlVisionModule(void);
// TODO: 在此添加您的方法。

bool CreateView(CWnd *view);

};

//.cpp
//方式一 Create处崩溃
bool CtlVisionModule ::CreateView(CWnd *view)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
m_pDlgMain = new CDlgMain;
m_pDlgMain->Create(IDD_DIALOG_MAIN, view);//崩~~
m_pDlgMain->ShowWindow(SW_SHOW);

return true;
}
//方式二 运行正常,dll中界面是弹出式,不是我想要的
bool CtlVisionModule ::CreateView(CWnd *view)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
m_pDlgMain = new CDlgMain;
m_pDlgMain->Create(IDD_DIALOG_MAIN, NULL);//
m_pDlgMain->ShowWindow(SW_SHOW);

return true;
}



调试界面,一大堆指针,看不明白:
...全文
133 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤客天涯 2020-05-15
  • 打赏
  • 举报
回复
坑踩得多了就成专家了
zgl7903 2020-05-15
  • 打赏
  • 举报
回复
DLL 接口中不宜使用MFC类/类指针做参数, 不同的编译器将产生不一样的结果 最好是使用基础变量类型,兼容性强
DATA_3 2020-05-14
  • 打赏
  • 举报
回复
问题解决,还是自己这方面知识太欠缺:采用HWND传递

//.h定义
CWnd m_pwnd;//这个不能定义到CreateView函数中,函数结束会崩

//.cpp代码修改如下
bool CCamController::CreateView(HWND hwnd)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
m_pDlgMain = new CDlgMain;

m_pwnd.Attach(hwnd);
m_pDlgMain->Create(IDD_DIALOG_MAIN, &m_pwnd);
m_pDlgMain->ShowWindow(SW_SHOW);

return true;
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧