2012-10-30 2 views
0

У меня есть приложение, использующее ленту MFC. Он разработан в Visual Studio 2010. У меня возникла странная проблема. Приложение отлично работает в Windows 7 и Windows 2008 R2. Однако он падает в Windows 2008, когда он пытается загрузить ленту из ресурса. Точная линияСбой ленты MFC в окнах 2008

ribbonBar-> LoadFromResource (IDR_RIBBON1); // IDR_RIBBON1 - это идентификатор ресурса.

Трассировка стека ниже

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 (Server) 2008 R2 поставляется с распространяемым пакетом Visual C++ 2010 и Windows Server 2008. Также учтите, что если вы обновили Visual Studio до SP1, вы должны использовать распространяемый пакет для SP1.

+0

Я установил визуальный C++ 2010 Redistributable x86 на моем компьютере, который является Windows 2000 SP2. Приложение не работает. –

1

Я знаю, что этот ответ продлится много лет, но я просто столкнулся с вашей проблемой при обновлении старого приложения MFC для поддержки ленты. Что нужно сделать для того, чтобы LoadResources работал правильно, было позволено позвонить AfxOleInit() во время InitInstance() в классе App. Я делаю это до загрузки фрейма MFC.

Надеюсь, это поможет!

Смежные вопросы