如何在静态库中使用MFC对话框资源
本帖最后由 funnymoon_dncs 于 2012-11-19 15:15:51 编辑 有个问题请教下大家。我有一个动态库里面有一个CDialog类用来弹出对话框。现在我想把这个库改成静态的,这样就可以减少DLL的数量。目前有个问题,就是静态编译以后运行时弹出对话框的地方会出错。具体就在AfxGetResourceHandle这个函数。我查了下资料,说是静态库没有自己的资源,需要使用调用者的资源。调用者是个动态库。我尝试把静态库的资源加入到动态库的资源中,但是没有变化仍然会崩溃。
由于对话框比较复杂,不想弄一大堆API来实现这个对话框。所以在此请问下具体如何操作才能解决这个问题。谢谢大家的帮助。
附带说明一下,我使用的是VS2005,谢谢。
[解决办法]
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
//则从此 DLL 导出的任何调入
//MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
//该函数的最前面。
//
//例如:
//
//extern "C" BOOL PASCAL EXPORT ExportedFunction()
//{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
//// 此处为普通函数体
//}
//
//此宏先于任何 MFC 调用
//出现在每个函数中十分重要。这意味着
//它必须作为函数中的第一个语句
//出现,甚至先于所有对象变量声明,
//这是因为它们的构造函数可能生成 MFC
//DLL 调用。
//
//有关其他详细信息,
//请参阅 MFC 技术说明 33 和 58。
//