Chinaunix首页 | 论坛 | 博客
  • 博客访问: 819473
  • 博文数量: 756
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:40
文章分类

全部博文(756)

文章存档

2011年(1)

2008年(755)

我的朋友

分类:

2008-10-13 16:07:39

在Dll中创建对话框并调用
作者:



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
--------------------next---------------------

dll中应用ActivX控件问题已经解决.
在DLL资源调用时,在App::InitInstance()中使用:
AfxEnableControlContainer();
::CoInitialize(NULL);
在App::ExitInstance()中使用:
CoUninitialize(); ( xiaohulicm 发表于 2007-3-22 14:46:00)
 
你的这个方法我也想到了,而且在Dialog中加入任何对话框控件都没问题,但是一插入Active X控件,对话框就弹不出来了,请问这是怎么回事?该怎样正确的插入ocx控件呢? ( king1912 发表于 2006-10-7 21:32:00)
 
我在调用DLL时候向DLL中的对话框传递参数CString 类型
要求DLL中对话框中对CString 进行处理~处理结果正常~
再调用DLL结束后却弹出错误对话框"The value of ESP was not properly saved acroos a function call..."
各位高手~怎么回事啊? ( lotusangel 发表于 2004-11-23 16:02:00)
 
如何将DLL中的对话框以无模式方式调用呢?

因DLL中定义了多个对话框,想让它们同时显示。 ( HiHand 发表于 2004-9-13 9:09:00)
 
typedef void (WINAPI * TESTDLL)();
这个是什么意思??可是(*lpproc)();没有使用他呀.
如果不用typedef void (WINAPI * TESTDLL)();
它,代码又怎么写 ( 天天天天 发表于 2004-9-8 11:37:00)
 
在VB中怎么调用阿???我按上面的方法试过了,但怎么不能调出对话框???而且我修改你一下SHOW,让它返回一值,如 
          Dim i As Integer
          i = Show
第二句有误!!怎么回事??

( esong 发表于 2003-8-15 18:03:00)
 
确实可以运行了,我以前show函数都没有加CWnd *pWnd,但在基于对话框的程序中可以不加参数,不会有问题,请问大虾为什么要加这个参数???不胜感激!!! ( flying_snail 发表于 2003-2-25 14:39:00)
 
我是这样做的,没有问题
extern "C" __declspec(dllexport) void Show(CWnd *pWnd)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest test(pWnd);
test.DoModal ();
}
////////////////////////////
typedef void (WINAPI * TESTDLL)(CWnd *pWnd);


HINSTANCE hmod;
hmod = ::LoadLibrary ("mfcdll.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)(AfxGetMainWnd());
FreeLibrary(hmod);

( xiaoguo 发表于 2003-2-25 10:03:00)
 
我拷了,它是出现重试,终止,忽略对话框, ( flying_snail 发表于 2003-2-24 10:04:00)
 
to flying_snail:
也许你没有把mfcdll.dll(在mfcdll工程的debug目录里)拷到后来建的工程的debug目录下
( applehph 发表于 2003-2-23 21:22:00)
 
.......................................................

--------------------next---------------------

阅读(261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~