在MFC下写dll文件会用到CWnd, CDialog等资源,但这些资源和利用该dll文件的程序的资源造成冲突,出现崩溃;
其时在写dll文件,尤其是MFC下的dll文件,要标明资源属于内部的,这样内外资源就不会冲突。抱歉了各位看官,我也感觉我废话多,直接上代码
在接口的主CPP下添加:
HINSTANCE save_hInstance = NULL; //全局变量
save_hInstance = AfxGetResourceHandle(); //申请资源句柄,在dll接口创建内部窗口前调用
AfxSetResourceHandle(::GetModuleHandle("XXXX.dll")); //注意动态库的名字
这样就告诉程序,资源不属于同一个模块
注意: 我个人发现没有找到原因, 假如dll文件的release版而外部程序是debug版,会出现申请的资源句柄为空,本来我以为错误,后来用获取错误信息的函数,发现返回值为0没有错误,所以,在用的时候一定要分清版本