求助:DLL中使用CFileDialog 无响应问题

tonforce 2012-09-13 01:12:53
情况是这样的:
1, 相关环境:vc2005, winXp, MFC
在dll的InitInstance()函数里以DoModal()方式打开了一个主对话框MainDialog,在该对话框里需要
载入csv文件加以分析输出数据。

所以我在主对话框MainDialog添加打开文件按钮,代码如下:
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TCHAR sFileFiltrate[] = _T("CSV Files (*.csv)|*.csv||") ;

CFileDialog dlgOpenCsv( TRUE, _T("*.csv"), _T("*.csv"), OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, sFileFiltrate ) ;

if ( dlgOpenCsv.DoModal() != IDOK )
{
... ;
}
}


问题:程序执行到dlgOpenCsv.DoModal()这就无响应了,跟下去发现在DoModal()里的nResult = ::AfxCtxGetOpenFileName(&m_ofn);停住了。

请教如何解决该问题?谢谢!
...全文
214 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonforce 2012-09-17
  • 打赏
  • 举报
回复
想了个替换的解决方案了,文件名放在配置文件里,直接读取配置文件。

谢谢大家的帮忙!
尤其感谢"dahuaixiaohuai”的热忱帮助!谢谢!
一叶之舟 2012-09-17
  • 打赏
  • 举报
回复
解决了就好
一叶之舟 2012-09-14
  • 打赏
  • 举报
回复
EXE代码

EXTERN_C LONG TestDLLDlg();
void CEXEDlg::OnOK()
{
// TODO: Add extra validation here
TestDLLDlg();
//CDialog::OnOK();
}


DLL创建选择MFC APPwinzard(DLL)
def文件中加入 TestDLLDlg

DLL中实现代码
#include "DLLdlg.h"
EXTERN_C LONG TestDLLDlg()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
DLLdlg dlg;
dlg.DoModal();
return S_OK;
}
一叶之舟 2012-09-14
  • 打赏
  • 举报
回复
EXE代码

EXTERN_C LONG TestDLLDlg();
void CEXEDlg::OnOK()
{
// TODO: Add extra validation here
TestDLLDlg();
//CDialog::OnOK();
}


DLL创建选择MFC APPwinzard(DLL)
def文件中加入 TestDLLDlg

DLL中实现代码
#include "DLLdlg.h"
EXTERN_C LONG TestDLLDlg()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
DLLdlg dlg;
dlg.DoModal();
return S_OK;
}
一叶之舟 2012-09-14
  • 打赏
  • 举报
回复
等一下
tonforce 2012-09-13
  • 打赏
  • 举报
回复
"dahuaixiaohuai"你好!
你能花几分钟时间帮我实现下吗?查找了很多资料,我也按照你的意思一步步去做了,但没有可喜的结果。
程序的逻辑是:exe调用dll, 主窗口由dll DoModal生成,在主窗口里读取文件
一叶之舟 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
做成MFC扩展的DLL。

++
[/Quote]
晕我1楼的回复怎么不见了
一叶之舟 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
做成MFC扩展的DLL。

++
[/Quote]
晕我1楼的回复怎么不见了
一叶之舟 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
做成MFC扩展的DLL。

++
[/Quote]
晕我1楼的回复怎么不见了
tonforce 2012-09-13
  • 打赏
  • 举报
回复
参照楼上的解答,我新建MFC dll时选择了MFC Extension Dll选项。
1, 在DllMain函数里,我调用了主对话框
2, 在主对话框内依旧CFileDialog dlg; dlg.DoModal(),问题依旧。
不知道那步错了?

......
// DllMain 部分代码
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("dst.DLL Terminating!\n");

// Terminate the library before destructors are called
AfxTermExtensionModule(dstDLL);
}

CD1 dlg;
dlg.DoModal();
return 1; // ok
}



AFX_MANAGE_STATE(AfxGetAppModuleState());

TCHAR sFileFiltrate[] = _T("CSV Files (*.csv)|*.csv||") ;

CFileDialog dlgOpenCsv( TRUE, _T("*.csv"), _T("*.csv"), OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, sFileFiltrate ) ;

if ( dlgOpenCsv.DoModal() != IDOK )
{
return ;
}
Gloveing 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
做成MFC扩展的DLL。
[/Quote]
++
一叶之舟 2012-09-13
  • 打赏
  • 举报
回复
做成MFC扩展的DLL。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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