Debug/Release Dll报错
2011-01-03 13:24
113 查看
每个模块(EXE或DLL)中,都存在一种全局的状态数据,MFC依靠这种全局的状态数据来区分不同的模块,以执行正确的操作。这种数据包括:Windows实例句柄(用于加载资源),指向应用程序当前的CWinApp和CWinThread对象的指针,OLE模块引用计数,以及维护Windows对象句柄与相应的MFC对象实例之间连接的各种映射等。但当应用程序使用多个模块时,每个模块的状态数据不是应用程序范围的。相反,每个模块具有自已的MFC状态数据的私有副本。这种全局的状态数据就叫做MFC模块状态。
对于MFC Extension DLL(using shared MFC DLL)类型的MFC DLL,切换当前模块状态的方法与Regular DLL using shared MFC DLL类型的MFC DLL所使用的方法很相似,这里不再举例实现。二者不同的地方如下:
在MFC扩展DLL中使用AFX_MANAGE_STATE(AfxGetStaticModuleState());时,会产生如下错误:
mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in dllextend.obj
因此在MFC扩展DLL中需要将AFX_MANAGE_STATE(AfxGetStaticModuleState());换成AFX_MANAGE_STATE(AfxGetAppModuleState());才能正确切换当前模块状态。
对于MFC Extension DLL(using shared MFC DLL)类型的MFC DLL,切换当前模块状态的方法与Regular DLL using shared MFC DLL类型的MFC DLL所使用的方法很相似,这里不再举例实现。二者不同的地方如下:
在MFC扩展DLL中使用AFX_MANAGE_STATE(AfxGetStaticModuleState());时,会产生如下错误:
mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in dllextend.obj
因此在MFC扩展DLL中需要将AFX_MANAGE_STATE(AfxGetStaticModuleState());换成AFX_MANAGE_STATE(AfxGetAppModuleState());才能正确切换当前模块状态。
相关文章推荐
- VS 编译Debug/Release时添加引用Debug|Release版本的dll
- 编译dll时debug和release版命名不同遇到的问题
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
- DLL的灾难 --- DEBUG与RELEASE版本不能交叉调用
- VS编译时自动引用Debug|Release版本的dll
- DLL的灾难---DEBUG与RELEASE版本不能交叉调用
- DLL的灾难 --- DEBUG与RELEASE版本不能交叉调用
- 如何让VS编译时自动引用Debug|Release版本的dll
- QT 发布Debug和Release的文件夹中缺少*.dll文件
- 编译dll时debug和release版命名不同遇到的问题
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
- 怎么区分.net dll编译时是Debug的还是Release的?
- 怎么区分.net dll编译时是Debug的还是Release的?
- 编译dll时debug和release版命名不同遇到的问题
- 判断dll是版本(Debug Or Release)[测试通过]
- Dll 文件导出方式,Debug/Release简要区别
- 编译dll时debug和release版命名不同遇到的问题
- VS编译时自动引用Debug|Release版本的dll
- debug和release版本dll混用导致的问题
- C#根据Debug、Release模式动态加载dll