我写的dll在普通的测试程序中运行很好,但是移植到目标程序就不行。
我猜想的原因是:
我的目标程序exe中原来有个对话框类ID都跟dll中的一样,后来删除了。dll中的有一些图片资源也是一样的。有可能冲突,不知道怎么办了?网上找了一些解决冲突的法子但是都不行。请问 老鸟们 有什么可行的方法找出原因(我用一个基于对话框的测试程序有是正常的)
我猜想的原因是:
我的目标程序exe中原来有个对话框类ID都跟dll中的一样,后来删除了。dll中的有一些图片资源也是一样的。有可能冲突,不知道怎么办了?网上找了一些解决冲突的法子但是都不行。请问 老鸟们 有什么可行的方法找出原因(我用一个基于对话框的测试程序有是正常的)
debug assertion failed
file:oleinit.cpp
Line:54
我选择重试按钮
BOOL AFXAPI AfxOleInit()
{
_AFX_THREAD_STATE* pState = AfxGetThreadState();
===〉定位到这里 ASSERT(!pState->m_bNeedTerm); // calling it twice?
// Special case DLL context to assume that the calling app initializes OLE.
// For DLLs where this is not the case, those DLLs will need to initialize
// OLE for themselves via OleInitialize. This is done since MFC cannot provide
// automatic uninitialize for DLLs because it is not valid to shutdown OLE
// during a DLL_PROCESS_DETACH.
if (afxContextIsDLL)
{
pState->m_bNeedTerm = -1; // -1 is a special flag
return TRUE;
} // first, initialize OLE
有是断言错误,定位到
_AFXWIN_INLINE int CBitmap::GetBitmap(BITMAP* pBitMap)
==>>这 { ASSERT(m_hObject != NULL);
return ::GetObject(m_hObject, sizeof(BITMAP), pBitMap); }还有ADO初始化可不可以来两次,我在dll中使用ado初始化了一次,在朱程序也初始化了,就是#import "C:\Program Files\C....
HINSTANCE hInstResourceClient = AfxGetResourceHandle();
AfxSetResourceHandle(::GetModuleHandle("BSSReporter.dll")); //调用Dll中的接口
CMyInterfaceClass test;
test.InitStateData("data\\BSStemp.BSS",101);
AfxSetResourceHandle(hInstResourceClient); 我都把dll中的对话框的资源#defien IDxxxx 后的数字改成与exe都不一样了,还是不行。(用其他exe都没问题的阿)好心人救救我
我把Dll中的所有ID加了后缀_DLL并将ID定义到32600+就没问题了Thanks again.
===〉定位到这里 ASSERT(!pState->m_bNeedTerm); // calling it twice?
一开始是这里断言么,看看为什么m_bNeedTerm会被设为false