我在MFC扩展DLL中导出如下类
如果DLL中的对话框模板ID与EXE中的对话框模板ID刚好相等,则显示的是EXE中的对话框
我想显示DLL中的对话框,杂办? //MyDlg.h 文件:class AFX_EXT_CLASS CMyDlg : public CDialog
{
//....
//{{AFX_DATA(CMyDlg)
//enum { IDD = IDD_DIALOG1 };
enum { IDD = 1000 }; // 1000
// NOTE: the ClassWizard will add data members here
//....
}; 遇到问题:
我把对MyDlg.h 文件给可执行文件编译,遇到 IDD_DIALOG1 未定义
于是,我强行把
//enum { IDD = IDD_DIALOG1 };
改为
enum { IDD = 1000 }; // resourch.h 中,IDD_DIALOG1 =1000如果EXE项目中,有个对话框模板刚好也是等于1000,那显示的就是EXE中的对话框
解决方案 »
- CScrollView 滚动后刷新问题
- (socket编程)socket 接收数据成功后,显示连接服务器失败!
- DLL LoadLibrary ServiceMain?不知道到底是哪的问题。
- *****谁能提供一个用sdk写的smtp带验证的发送邮件代码?*****
- 我在单文档中嵌入了一个对话框,能否在菜单中关闭此对话框,再嵌入另一个对话框?
- 有关程序结束的问题
- 谁知道.caj是什么文件?用什么软件可以看?
- 哪里能下载msdn
- 以前VC开发的CS客户端的系统,想封装为Web Service,还是用VC开发,难度是不是很大?
- Doc-View中调用EXCEL问题
- 程序的调用 在线等!~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!!
- vc++ 怎么获得进程所操作的文件的绝对路径
你不能保证自己定义的对话框ID,不许应用程序别人用吧
AfxSetResourceHandle(GetModuleHandle(_T("你的DLL")));
AfxSetResourceHandle(GetModuleHandle(NULL));
你的上面两句,加在哪里?
加在下面的函数里么?加在那个地方?
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("SEP25.DLL Initializing!\n");
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(Sep25DLL, hInstance))
return 0;
new CDynLinkLibrary(Sep25DLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("SEP25.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(Sep25DLL);
}
return 1; // ok
}
void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
AfxSetResourceHandle(GetModuleHandle(_T("sep25.dll")));
CMyDlg dlg;
dlg.DoModal();
AfxSetResourceHandle(GetModuleHandle(NULL));
}
但是人家 EXE 项目中不会记住要这么做的,他只把他当做一个普通类
如果在DLL内部,该如何做?
AFX_MANAGE_STATE(AfxGetStaticModuleState())
可以保证只调用DLL中的资源