2012-10-30 43 views
0

我有一個使用MFC功能區的應用程序。它是在Visual Studio 2010中開發的。我面臨一個奇怪的問題。該應用程序在Windows 7和Windows 2008 R2中運行良好。然而,當它試圖從資源加載功能區時,它在Windows 2008中崩潰。確切的線是MFC功能區在Windows 2008崩潰

ribbonBar-> LoadFromResource(IDR_RIBBON1); // IDR_RIBBON1是資源ID。

堆棧跟蹤低於

gui.exe!ATL::CComPtrBase<IXMLDOMDocument>::~CComPtrBase<IXMLDOMDocument>() Line 162 + 0xa bytes C++ 
gui.exe!ATL::CComPtr<IXMLDOMDocument>::~CComPtr<IXMLDOMDocument>() + 0x11 bytes C++ 
gui.exe!ATL::CComQIPtr<IXMLDOMDocument,&_GUID_2933bf81_7b36_11d2_b20e_00c04f983e60>::~CComQIPtr<IXMLDOMDocument,&_GUID_2933bf81_7b36_11d2_b20e_00c04f983e60>() + 0x11 bytes C++ 
gui.exe!ATL::CXMLNode<IXMLDOMDocument>::~CXMLNode<IXMLDOMDocument>() Line 47 + 0xb bytes C++ 
gui.exe!ATL::CXMLDocument::~CXMLDocument() Line 269 + 0x13 bytes C++ 
gui.exe!CXMLParserRoot::~CXMLParserRoot() Line 423 + 0x43 bytes C++ 
gui.exe!CMFCRibbonInfo::Read(unsigned char * lpBuffer=0x013acb14, unsigned int nSize=83851) Line 703 + 0x15 bytes C++ 
gui.exe!CMFCRibbonInfoLoader::LoadFromBuffer(unsigned char * lpBuffer=0x013acb14, unsigned int nSize=83851) Line 112 + 0x1b bytes C++ 
gui.exe!CMFCRibbonInfoLoader::Load(const char * lpszResID=0x000005d8, const char * lpszResType=0x0000001c, HINSTANCE__ * hInstance=0x00400000) Line 85 + 0x1c bytes C++ 
gui.exe!CMFCRibbonBar::LoadFromResource(const char * lpszXMLResID=0x000005d8, const char * lpszResType=0x0000001c, HINSTANCE__ * hInstance=0x00000000) Line 740 + 0x17 bytes C++ 
gui.exe!CMFCRibbonBar::LoadFromResource(unsigned int uiXMLResID=1496, const char * lpszResType=0x0000001c, HINSTANCE__ * hInstance=0x00000000) Line 731 C++ 

任何建議,意見,如何去對這個問題是極大的讚賞。請問,如果你需要更多的信息。

+0

這是不是很清楚崩潰實際上是什麼樣子。析構函數調用中的訪問衝突幾乎總是由堆損壞引起的。腐敗不是由功能區控制引起的,而是由較早運行的代碼引起的。 –

回答

0

您是否嘗試在部署的計算機上安裝可再發行組件包? Windows(服務器)2008 R2可能不包含Visual C++ 2010可再發行組件包和Windows Server 2008。還要考慮到如果您將Visual Studio更新到SP1,則應該使用SP1的可再發行組件包。

+0

我在我的機器上安裝了Visual C++ 2010 Redistributable x86,它是Windows 2008 SP2。該應用程序無法正常工作。 –

1

我知道這個答案已經晚了多年,但我在更新舊的MFC應用程序以支持功能區時遇到了同樣的問題。 LoadResources需要做什麼才能正常工作,在App類中的InitInstance()期間需要撥打AfxOleInit()。我在加載MFC框架之前執行此操作。

希望這會有所幫助!