在MFC扩展DLL中生成了一个对话框类,在对话框上面放了一个 ActiveX控件,在DLL的客户程序中导出这个对话框类并DoModal,结果弹出的对话框上面ActiveX控件没有显示出来,我也搜索了以往的帖子,但是解决的方法不明显,现在还是初学者,对C++没有深入的了解,据说需要添加函数AfxOleInit()和AfxEnableControlContainer(),还需要对控件的环境进行初始化,但我基本不动! 现在我只是想要在DLL调用时能在对话框上显示出控件就行了! 望高手指点,谢谢!
解决方案 »
- 控件焦点自动切换的问题
- 什么时候该用CoFreeUnusedLibraries()?
- 如何获得 device property 中的各种信息
- 如何做一个让一个插件从一个类型库实现
- 散分求救!media player控件缓存设置问题
- 大家一起来交流VC API 啊...如果不懂也希望帮我顶一下.有分!!!!!!!!!!!!!!!!!
- 请问在winsock编程中,如何实现端口复用比如:我想复用80端口,或提供一点相关的资料
- 请大家帮我看看!!!!!!!!!!!!!!!
- 谁可以创建一个VC群,这样可以让我们共同交流?100分给好心人
- CString对应字符串中减少一个字符
- c++ MPI MFC 并行编程
- WINDOWS字符编码问题 vc中的wchat_t 怎么表示unicode字符?
试试在DLL的对话框类中重载WindowProc,再里面添加AFX_MANAGE_STATE(AfxGetStaticModuleState());
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTimeTime time;
time.DoModal ();
}
我已经添加了,但还是不行,而且有时候弹不出对话框
if(hLib)
{
typedef void (*PSHOWFUN)(void); PSHOWFUN pShow = (PSHOWFUN)GetProcAddress(hLib, "Show");
if(pShow)
{
pShow();
}
else
{
DWORD dwErr = GetLastError();
ASSERT(0);
}
}
else
{
DWORD dwErr = GetLastError();
ASSERT(0);
} if(hLib)
FreeLibrary(hLib);
OleInITialize(NULL) ;
::CoInITialize(NULL);
AfxEnableControlContainer();
现在问题是这些个语句放哪儿。我可能放错地方了(放到APP::InITInstance()函数底下了),导致没有成功。希望大家能帮忙指点一下,告诉我正确的方法,谢谢。
这是dll导出函数
#include "StdAfx.h"
#include "dll_msflexgrid.h"
#include "TestDlg.h" extern "C" void _declspec(dllexport)ShowDlg()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTestDlg dlg;
dlg.DoModal();
}在CTestDlg对话框上有一个msflexgrid控件
这是在另一个程序中的按钮响应函数
HINSTANCE hdll;
hdll=LoadLibrary("..\\dll_msflexgrid.dll");
if(hdll!=NULL)
{
typedef void (*PFDlgShow)();
PFDlgShow dlgshow;
dlgshow=(PFDlgShow)GetProcAddress(hdll,"ShowDlg");
if (dlgshow != NULL)
dlgshow();
刚学VC,弄了两天了,没弄明白,希望高手能指点一下,谢谢 .
编程论坛 1 个网友回答: 大家帮帮看看啊 实在是需要帮忙啊 .
编程论坛 2 个网友回答: 解决了 原来是在要生成的dll里面添加一个初始化函数 再把那几句加进去就可以了 .
编程论坛 3 个网友回答: 这种不是应该在EXE中添加么,在EXE中添加