转载自:http://blog.chinaunix.net/uid-20532101-id-1931929.html 以前写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的函数开始添加上AFX_MANAGE_STATE (AfxGetStaticModuleState()).一直不明白这样做的含义,也一直没有这样做,而且代码也工作得好好的,所以感觉这好像一句废 话. 最近的项目中,需要在DLL里使用MFC生成界面,这才发现一旦资源放在不同的动态库里,而且还和多线程搅和…
应用程序进程本身及其调用的每个DLL模块都具有一个全局唯一的HINSTANCE句柄,它们代表了DLL或EXE模块在进程虚拟空间中的起始地址.进程本身的模块句柄一般为0x400000,而DLL模块的缺省句柄为0x10000000.如果程序同时加载了多个DLL,则每个DLL模块都会有不同的 HINSTANCE.应用程序在加载DLL时对其进行了重定位. 共享MFC DLL(或MFC扩展DLL)的规则DLL涉及到HINSTANCE句柄问题,HINSTANCE句柄对于加载资源特别重要.EXE和DLL都有其…
AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: #define IDD_DLL_DIALOG 2000 .创建一个基于对话框的mfc应用程序,它包含两个对话框资源,IDD_UI_DIALOG和IDD_EXE_DIALOG.并将后者的ID指定如下: #define IDD_EXE_DIALOG 2000 其中前者是这个应用程序的用户界面,单击上面…
以前写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的函数开始添加上 AFX_MANAGE_STATE(AfxGetStaticModuleState()).一直不明白这样做的含义,也一直没有这样做,而且代码也工作 得好好的,所以感觉这好像一句废话. 最近的项目中,需要在DLL里使用MFC生成界面,这才发现一旦资源放在不同的动态库里,而且还和多 线程搅和在一起的时候,事情就变得异常的复杂,以前对MFC的一知半解已经不足与应付了.程序莫名的崩溃,莫名的ASSERT,资源…
在MFC使用过程中,遇到DLL资源与主EXE资源冲突问题. 出现这样的Bug,一时无从下手. 报错位置在核心代码中dlgcore.cpp. [cpp] view plaincopy BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource, BOOL bInvisibleChild) { ASSERT(lpszResource != NULL); HINSTANCE hInst = AfxFindResourceHandle(lpszRes…
以前写MFC的DLL的时候,总会在自动生成的代码框架里看到提示,需要在每一个输出的函数开始添加上AFX_MANAGE_STATE(AfxGetStaticModuleState()).一直不明白这样做的含义,也一直没有这样做,而且代码也工作得好好的,所以感觉这好像一句废话. 最近的项目中,需要在DLL里使用MFC生成界面,这才发现一旦资源放在不同的动态库里,而且还和多线程搅和在一起的时候,事情就变得异常的复杂,以前对MFC的一知半解已经不足与应付了.程序莫名的崩溃,莫名的ASSERT,资源怎样也…
参考资料:http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html   背景需求: 使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务.master1为主,另一个是备. 需要在主备上漂移的资源有两个:VIP和nginx服务   准备两台机器: master1: 192.168.42.12        10.1.1.1(心跳) master2: 192.168.42.13        10.1.1.…
参考: http://blog.csdn.net/zgrjkflmkyc/article/details/16897881 http://www.oschina.net/question/565065_72669 ××××××××××××××××××××××××××××××××××××××××××××××× 统一管理: 在Win32编程的时候,为了方便项目中的资源统一管理,IDE提供了一个统一的格式资源文件,这是就是后缀为.rc的文件. 在程序编译的时候他会被编译器(具体来说是资源编译器)生成一…
Project->Properties->Configuration Properties->Debuging->Working Directory改为$(ProjectDir) ./ 该目录 ../该目录的父目录…
bool CWizardSheet::GetTextResource(UINT uID, CString& csContent) { HMODULE hModule=GetModuleHandle(NULL); HRSRC hRes = FindResource(hModule,MAKEINTRESOURCE(uID),_T("txt")); if(hRes == NULL) { FreeResource(hRes); } else { HGLOBAL hglobal = Lo…