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