正文

DLL中调用Dialog的奇怪现象 2007-09-14 14:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/29414.html

分享到:

DLL中调用Dialog的奇怪现象
发布时间:2007-5-20 0:45:46
 

我在一个DLL中使用一个对话框,该对话框中使用了一个custom控件,该控件在Exe中可以正常使用,但是在DLL中使用时,DoModal()返回-1,对话框不显示,这是为什么?  
---------------------------------------------------------------  
 
在DllMain中PROCESS_ATTACH的时候调用CoInitialize(),在PROCESS_DETACH的时候调用CoUnInitialize()  
---------------------------------------------------------------  
 
http://www.vchome.net/tech/dll/dll44.htm  
在Dll中创建对话框并调用  
作者:freedk  
 
下载本文示例代码  
 
1、第一步创建一“MFC  AppWizard  (dll)”工程,接下来选择“Regular  Dll  using  shared  MFC  DLL”,点击“Finish”。  
 
2、添加一对话框资源到工程中,从菜单中选择Insert->Resource,添加一“Dialog”  
选择“New”,至此对话框已添加到DLL工程中。  
 
3、为对话框添加一新类,如:CTest,基类为CDialog。  
 
4、在MFCDLL.cpp中(因创建的工程为MFCDLL)添加接口函数:  
 
extern  "C"  __declspec(dllexport)  void  Show()  
 
{  
 
               AFX_MANAGE_STATE(AfxGetStaticModuleState());  
 
               CTest  test;  
 
               test.DoModal  ();  
 
}  
 
别忘了在文件中添加:  #include  "Test.h":),大功告成,编译吧!    
 
5、用VC新建一对话框工程,在一按钮点击事件中添加如下代码:    
 
typedef  void  (WINAPI  *  TESTDLL)();  
 
   
 
   
 
HINSTANCE  hmod;  
 
hmod  =  ::LoadLibrary  ("mfcdll.dll");  
 
if(hmod==NULL)  
 
{  
 
               AfxMessageBox("Fail");  
 
}  
 
TESTDLL  lpproc;  
 
lpproc  =  (TESTDLL)GetProcAddress  (hmod,"Show");  
 
if(lpproc!=(TESTDLL)NULL)  
 
               (*lpproc)();  
 
FreeLibrary(hmod);  
 
6、试试看,是不是DLL中对话框显示出来了:)  
 
测试环境:VC6.0+Win2000  
 
---------------------------------------------------------------  
 
函数开始处要调用AFX_MANAGE_STATE(AfxGetStaticModuleState());  
 
---------------------------------------------------------------  
 
同意楼上  
---------------------------------------------------------------  
 
MFC扩展DLL的资源ID可能与EXE的冲突,解决的方法是在使用DLL资源之前调用AfxSetResourceHandle设置MFC使用DLL作为默认资源加载模块,使用之后再设回来  
---------------------------------------------------------------  
 
MFC扩展DLL的实例句柄可以在DllMain中获得

阅读(19687) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册