DLL调用关闭时出错! 在多文档框架中调用封装好的FORMVIEW DLL,然后由FROMVIEW DLL调用一个封装好的对话框DLL,执行时正常,但关闭对话框时出现断言错误,这是什么原因?我把FORMVIEW和对话框封装在一个DLL,在多文档框架中调用一切正常! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是你的对话框在关闭的时候自己释放,但在formview中可能调用了dialog主动释放 是用户点击"关闭",关闭对话框/错误如下:BOOL CWnd::DestroyWindow(){ if (m_hWnd == NULL) return FALSE; CHandleMap* pMap = afxMapHWND(); ASSERT(pMap != NULL); CWnd* pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);#ifdef _DEBUG HWND hWndOrig = m_hWnd;#endif#ifdef _AFX_NO_OCC_SUPPORT BOOL bResult = ::DestroyWindow(m_hWnd);#else //_AFX_NO_OCC_SUPPORT BOOL bResult; if (m_pCtrlSite == NULL) bResult = ::DestroyWindow(m_hWnd); else bResult = m_pCtrlSite->DestroyControl();#endif //_AFX_NO_OCC_SUPPORT // Note that 'this' may have been deleted at this point, // (but only if pWnd != NULL) if (pWnd != NULL) { // Should have been detached by OnNcDestroy#ifdef _DEBUG ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);#endif } else {#ifdef _DEBUG ASSERT(m_hWnd == hWndOrig);// 光标停留处//出错位置#endif // Detach after DestroyWindow called just in case Detach(); } return bResult;} 在ASSERT(m_hWnd == hWndOrig);处出错界面错误对话框信息如下:Debug Assertion Failed!file: wincore.cppLine:986 针对“我把FORMVIEW和对话框封装在一个DLL,在多文档框架中调用一切正常!”我认为是资源的问题!在DLL中调用另一DLL,如你的FORMVIEW 调用 对话框DLL,“对话框”DLL的DllMain()不会成功加载资源!!必须__declspec(dllexport)导出函数加载资源,“显示调用”后才能正确加载“对话框”DLL的资源到“资源链”中!!!说错了请指教:) 怎么在__declspec(dllexport)导出函数中加载资源,可以说详细点吗?"显示调用"是什么意思?另外,对话框DLL已经调用成功并显示出来,只是在关闭对话框时,出现断言错误. 导出函数如下:extern "C" __declspec(dllexport) int ShowDlg(CWnd * pWnd,char* sell_ID, DLLParam *pDllParam){ CSellDlg sellDlg; //CSellDlg为弹出的对话框类 AFX_MANAGE_STATE(AfxGetStaticModuleState()); g_strConnect = pDllParam->strConnect; g_Database = pDllParam->pDatabase; g_strWorkerNum = pDllParam->strWorkerNum; g_nPageSize = pDllParam->nPageSize; sellDlg.m_Sell_ID = sell_ID; sellDlg.isNew = FALSE; sellDlg.DoModal(); return 1;} WaitForMultipleObjects的问题 主线程进行运算,子线程显示对话框负责进度的显示,这样是可以的吗? ----求教----关于关闭模式对话框的问题 续:求函数加入动态库及使用范例及说明。快来拿分,大家发发! 怎样在CEDIT控件里获取数据,up有分 在VC中如何实现在不同的区域有不同的弹出式菜单 如何编程实现MPEG硬解压卡播放 高分求救,快来啊!! 已知进程句柄,如何得到进程的所有线程? 迷惑 如何变换一个WORD型数据的字节顺序,除了htons()以外还有其他的函数吗? VC中switch(str)不能通过
错误如下:
BOOL CWnd::DestroyWindow()
{
if (m_hWnd == NULL)
return FALSE; CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
CWnd* pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);
#ifdef _DEBUG
HWND hWndOrig = m_hWnd;
#endif#ifdef _AFX_NO_OCC_SUPPORT
BOOL bResult = ::DestroyWindow(m_hWnd);
#else //_AFX_NO_OCC_SUPPORT
BOOL bResult;
if (m_pCtrlSite == NULL)
bResult = ::DestroyWindow(m_hWnd);
else
bResult = m_pCtrlSite->DestroyControl();
#endif //_AFX_NO_OCC_SUPPORT // Note that 'this' may have been deleted at this point,
// (but only if pWnd != NULL)
if (pWnd != NULL)
{
// Should have been detached by OnNcDestroy
#ifdef _DEBUG
ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);
#endif
}
else
{
#ifdef _DEBUG
ASSERT(m_hWnd == hWndOrig);// 光标停留处//出错位置
#endif
// Detach after DestroyWindow called just in case
Detach();
}
return bResult;
}
界面错误对话框信息如下:
Debug Assertion Failed!file: wincore.cpp
Line:986
extern "C" __declspec(dllexport) int ShowDlg(CWnd * pWnd,char* sell_ID, DLLParam *pDllParam)
{
CSellDlg sellDlg; //CSellDlg为弹出的对话框类
AFX_MANAGE_STATE(AfxGetStaticModuleState()); g_strConnect = pDllParam->strConnect;
g_Database = pDllParam->pDatabase;
g_strWorkerNum = pDllParam->strWorkerNum;
g_nPageSize = pDllParam->nPageSize; sellDlg.m_Sell_ID = sell_ID;
sellDlg.isNew = FALSE;
sellDlg.DoModal();
return 1;
}