如何从DLL中导出对话框?

来灵 2007-10-17 04:16:47
我在MFC扩展DLL中创建了一个导出函数ibrd,在这个函数中调用DLL中定义的对话框资源对象,部分代码如下:

……
#define EQUIPAPI __declspec(dllexport)


……

EQUIPAPI int ibrd()
{
// gpib_dlg.UpdateData(TRUE);

// AFX_MANAGE_STATE(AfxGetStaticModuleState());

CGPIB_Simulation_Dlg gpib_dlg;

gpib_dlg.DoModal();
gpib_dlg.m_Cshow = _T("0");
gpib_dlg.UpdateData(FALSE);
return 0;
}

其中的m_Cshow是对话框上的文本编辑框对应的CString 类型的变量。

当我在应用程序中调用函数ibrd(); 时,可以出现对话框,但是编辑框中不显示数字 0 。还出现了四个断言错误:

wincore.cpp 4184和4191行
winocc.cpp 104行
dlgdata.cpp 44行

请问一下高手这是怎么回事啊?如何解决呢?



...全文
167 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq14923349 2007-10-18
  • 打赏
  • 举报
回复
需要在
stdafx.h里面加resource.h
不过似乎问题和你的不一样
来灵 2007-10-18
  • 打赏
  • 举报
回复
如果忘记加#include "resource.h",则编译是不能通过的。
qq14923349 2007-10-18
  • 打赏
  • 举报
回复
断言错误是不是没有加上
#include "resource.h"
试试看
来灵 2007-10-18
  • 打赏
  • 举报
回复
刚看到一篇资料,说在MFC扩展DLL中需要将AFX_MANAGE_STATE(AfxGetStaticModuleState());换成AFX_MANAGE_STATE(AfxGetAppModuleState());才能正确切换当前模块状态。

我试了下,编译没有生成错误了,可是断言错误还存在,弄不明白这些,会者不难,请指教啊!
凤矶 2007-10-18
  • 打赏
  • 举报
回复
AFX_MANAGE_STATE(AfxGetStaticModuleState());
--------------------------------------
看错了,扩展的这个不要
来灵 2007-10-18
  • 打赏
  • 举报
回复
请问这些断言是怎么回事啊?
来灵 2007-10-17
  • 打赏
  • 举报
回复
谢谢楼上各位大侠!

现在可以显示数字了,但是当把被导出的对话框关闭时,这几个断言错误仍然存在。

如果我把AFX_MANAGE_STATE(AfxGetStaticModuleState()); 加上,却会出现三个生成错误,如下
GPIB_Simulation_DLL error LNK2005: _DllMain@12 已经在 GPIB_Simulation_DLL.obj 中定义
GPIB_Simulation_DLL warning LNK4006: _DllMain@12 已在 GPIB_Simulation_DLL.obj 中定义;已忽略第二个定义
GPIB_Simulation_DLL fatal error LNK1169: 找到一个或多个多重定义的符号

刚学DLL,被这些弄晕了,请高手们不吝赐教,不胜感激!!!
Avoid 2007-10-17
  • 打赏
  • 举报
回复
AfxGetStaticModuleState
这个不能注销
loginsot 2007-10-17
  • 打赏
  • 举报
回复
楼上说得对。加上AfxGetStaticModuleState()就可以了。
凤矶 2007-10-17
  • 打赏
  • 举报
回复
AFX_MANAGE_STATE(AfxGetStaticModuleState());
------------------------------------------------这个要

gpib_dlg.m_Cshow = _T("0");
gpib_dlg.DoModal();


ouyh12345 2007-10-17
  • 打赏
  • 举报
回复
次序错了。
gpib_dlg.m_Cshow = _T("0");
gpib_dlg.DoModal();
DoModal完了以后,对话框就销毁了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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