如題,MFC DLL 里執行緒創建新視窗。貼上相關代碼,請大神們給分析下可能的原因
視窗如果是一個空視窗XP下也正常,但是現在視窗很復雜。有很多個控制元件,WIN7正常,XP就回傳-1。
BOOL CtestApp::InitInstance()
{
CWinApp::InitInstance();
thread_Init();
return TRUE;
}
void CtestApp::thread_Init()
{
CloseHandle((HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall *)(void *))&thread_main, NULL, 0, NULL));
}
unsigned int __stdcall CtestApp::thread_main(void* p)
{
//新建一個對話框物件
pTestUI = new CDlg1;
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
//HINSTANCE hResOld = AfxGetResourceHandle();
//AfxSetResourceHandle(theApp.m_hInstance);
dbgPrint("準備打開視窗pTestUI = %X", pTestUI);
INT_PTR nResponse = pTestUI->DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置處理何時用
// “確定”來關閉對話框的代碼
dbgPrint("打開視窗成功");
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置處理何時用
// “取消”來關閉對話框的代碼
dbgPrint("打開視窗失敗");
}
else if (nResponse == -1)
{
DWORD nErr = ::GetLastError();
dbgPrint("打開視窗終止%X", nErr);
TRACE(traceAppMsg, 0, "警告: 對話框創建失敗,應用程式將意外終止。\n");
TRACE(traceAppMsg, 0, "警告: 如果您在對話框上使用 MFC 控制元件,則無法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
}
//AfxSetResourceHandle(hResOld);
dbgPrint("打開視窗完成");
delete pTestUI;
::FreeLibraryAndExitThread(theApp.m_hInstance, 1);
return 0;
}
uj5u.com熱心網友回復:
執行緒里的話 可能需要初始化 COMCoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
//your code
……
CoUninitialize();
uj5u.com熱心網友回復:
一些控制元件初始化是否在執行緒中一開始做了uj5u.com熱心網友回復:
DoModal Debug下F11進入看看,哪里失敗了?uj5u.com熱心網友回復:
程式是在Win7下用 VS2013開發的。雖然虛擬機裝了xp系統。但是VS2013裝不了。所以沒法除錯。
uj5u.com熱心網友回復:
程式開發中沒有用到其他第三方插件呀?是系統的COM組件需要初始化么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/128940.html
標籤:基礎類
上一篇:新手求助c++問題
