新建了一个工程A(MFC DLL),Regular dll using shared MFC DLL,插入一个对话框资源,并生成CPanel类。定义全局函数:
CDialog __declspec(dllexport) *Opendlg(CWnd *parent)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPanel *dlg=new CPanel();
dlg->Create(IDD_PANEL,parent);
dlg->ShowWindow(SW_SHOW);
return dlg;
}
另建一个工程B(MFC EXE),基于对话框,在OnInitDialog中Opendlg(this),就会出错。为什么?
如果把A编译成Release版本却没有问题!?
还有如果改成弹出模式对话框也不会出错
CDialog __declspec(dllexport) *Opendlg(CWnd *parent)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPanel *dlg=new CPanel();
dlg->Create(IDD_PANEL,parent);
dlg->ShowWindow(SW_SHOW);
return dlg;
}
另建一个工程B(MFC EXE),基于对话框,在OnInitDialog中Opendlg(this),就会出错。为什么?
如果把A编译成Release版本却没有问题!?
还有如果改成弹出模式对话框也不会出错
解决方案 »
- 怎么用DLL输出类?以及在别的程序中引用?类里面有数据库操作和对话框
- 关于VC6.0里的按钮
- MessageBox 问题.
- 绑定两个table时如何往其中一个table加记录
- 在VC2005中,能在按钮上加图片吗?
- 大家帮我看看这个问题咱解决啊?
- 告诉大家一个好消息:微软居然为vss6.0作了sp6的补丁,大家可以去下载!
- 使用ADO进行数据库编程程序结构的问题
- 自绘标题栏的问题,详细描述请进来看(如果能解决晚上结贴)
- 我在VC里面为工程添加资源,VC创建的资源文件里竟然有两个ID....的值同时为101,这样对不对,要不要我手工改过来!
- 字符串的问题
- 如何让CEdit接收回车去SetFoucs
在CWnd::AssertValid() line 890 + 25 bytesvoid CWnd::AssertValid() const
{
...
else
{
// should be a normal window
ASSERT(::IsWindow(m_hWnd)); // should also be in the permanent or temporary handle map
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);//停在这句了...
}
AfxAssertValidObject(const CObject * 0x0012fe74 {CTestDlg}, const char * 0x5f4d1330 THIS_FILE, int 258) line 108
CWnd::CreateDlgIndirect(const DLGTEMPLATE * 0x100194a0, CWnd * 0x0012fe74 {CTestDlg hWnd=???}, HINSTANCE__ * 0x10000000) line 260
CDialog::CreateIndirect(const DLGTEMPLATE * 0x100194a0, CWnd * 0x0012fe74 {CTestDlg hWnd=???}, void * 0x00000000, HINSTANCE__ * 0x10000000) line 223
CDialog::CreateIndirect(void * 0x100194a0, CWnd * 0x0012fe74 {CTestDlg hWnd=???}, HINSTANCE__ * 0x10000000) line 200 + 22 bytes
CDialog::Create(const char * 0x000007d0, CWnd * 0x0012fe74 {CTestDlg hWnd=???}) line 182 + 20 bytes
CDialog::Create(unsigned int 2000, CWnd * 0x0012fe74 {CTestDlg hWnd=???}) line 543 + 29 bytes
Opendlg(CWnd * 0x0012fe74 {CTestDlg hWnd=???}) line 10
CPanel *dlg=new CPanel();
改为
CPanel *dlg=new CPanel();
AFX_MANAGE_STATE(AfxGetStaticModuleState()); 其实还是还是返回dlg的hwnd比较好。
{
...
dlg->Create(IDD_PANEL, CWnd::FromHandle(hWnd) );
...
}
实际运行中,窗口指针是会改变的,而句柄会保持不变。