最近要写一个程序。程序的主要实现是:将包含业务处理的对话框类封装到dll中,然后在主程序的对话框中显示出来。
主程序的对话框中会有一个CTabCtrl,dll中的对话框将以标签页的形式显示出来。但是现在,总是运行出错。
========下面是dll中到处部分================
extern "C" __declspec(dllexport) void CreatePlugin(CWnd* pParentWnd, CPluginBase** ppPlugin)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*ppPlugin = new CCalcDlg(pParentWnd);
(*ppPlugin)->Create(IDD_CALC, pParentWnd);
}
其中,CCalcDlg就是包含业务处理的类,继承自CPluginBase。CPluginBase继承自CDialog。
========下面是主程序中调用部分======在主程序的OnInitDialog中=======
hInst = LoadLibrary(szPluginFile);
lpCreate = (LPCREATEPLUGIN)GetProcAddress(hInst, "CreatePlugin");
if (lpCreate != (LPCREATEPLUGIN)NULL)
{
(*lpCreate)(this, &pPlugin);
}
FreeLibrary(hInst);
===========================================
现在的问题是,(*ppPlugin)->Create(IDD_CALC, pParentWnd);这个老运行出错。
高手们,帮下忙。
主程序的对话框中会有一个CTabCtrl,dll中的对话框将以标签页的形式显示出来。但是现在,总是运行出错。
========下面是dll中到处部分================
extern "C" __declspec(dllexport) void CreatePlugin(CWnd* pParentWnd, CPluginBase** ppPlugin)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*ppPlugin = new CCalcDlg(pParentWnd);
(*ppPlugin)->Create(IDD_CALC, pParentWnd);
}
其中,CCalcDlg就是包含业务处理的类,继承自CPluginBase。CPluginBase继承自CDialog。
========下面是主程序中调用部分======在主程序的OnInitDialog中=======
hInst = LoadLibrary(szPluginFile);
lpCreate = (LPCREATEPLUGIN)GetProcAddress(hInst, "CreatePlugin");
if (lpCreate != (LPCREATEPLUGIN)NULL)
{
(*lpCreate)(this, &pPlugin);
}
FreeLibrary(hInst);
===========================================
现在的问题是,(*ppPlugin)->Create(IDD_CALC, pParentWnd);这个老运行出错。
高手们,帮下忙。
解决方案 »
- png和背景合并就不会出现那种丢透明的问题。
- Borland C++Builder 6.0 Enterprise 7CD
- 请问一个完整的win32程序能做成一个dll吗?
- c/c++/vc开发人员热门讨论群,欢迎开发人员加入。
- 怎样实现网络传输多个文件
- 获得了当前IE的IHTMLDocument2接口如何获取当前浏览网页的HTML代码?
- ★ 怎样写一个定时自动运行的程序,让它在后台执行(最好是一个服务)
- 我要疯了!!,求救!!!
- 在使用SetWindowPos()时,为什么创建控件指针去调用这个函数运行时会发生内存泄露?而用绑顶的变量就完全没问题?
- 大虾们帮俺看看为啥LeaveCriticalSection没有执行
- 怎么编程实现,让QQ2009进行清屏?
- 还是关于文件映像问题!
AfxSetResouceHandle(hDllModule),这个是在DLL中?
hRes = AfxGetResourceHandle();
AfxSetResouceHandle(hDll);
Create........
AfxSetResouceHandle(hRes);另,你的Dll类型是?
--------------------------------------------------------
AFX_MANAGE_STATE(AfxGetStaticModuleState());
http://www.vczx.com/article/show.php?id=201
http://www.vczx.com/article/show.php?id=200
访问完后 AfxSetResouceHandle(hApp);
AFX_MANAGE_STATE(AfxGetStaticModuleState()); 加了这个就可以实现资源的切换了。
我刚才单步了下,总是在 CWnd::CreateDlgIndirect的
if (pParentWnd != NULL)
ASSERT_VALID(pParentWnd);
这里报错。
也不知道有没有这样的例子,比如主对话框中有个CtabCtrl,每个标签页都被封装到dll中。