Библиотека импортированных типов больше не работает

У меня есть большой проект в C++ Builder, который, похоже, использовал функцию Import Type Library. В нем есть файл с таким заголовком

// ************************************************************************ //
// WARNING                                                                    
// -------                                                                    
// The types declared in this file were generated from data read from a       
// Type Library. If this type library is explicitly or indirectly (via        
// another type library referring to this type library) re-imported, or the   
// 'Refresh' command of the Type Library Editor activated while editing the   
// Type Library, the contents of this file will be regenerated and all        
// manual modifications will be lost.                                         
// ************************************************************************ //

// C++ TLBWRTR : $Revision:   1.134.1.41  $
// File generated on 2003-10-27 12:57:05 from Type Library described below.

// ************************************************************************ //
// Type Lib: C:\WINNT\system32\MQOA.DLL (1)
// IID\LCID: {D7D6E071-DCCD-11D0-AA4B-0060970DEBAE}\0
// Helpfile: 
// DepndLst: 
//   (1) v2.0 stdole, (C:\WINNT\System32\stdole2.tlb)
//   (2) v4.0 StdVCL, (C:\WINNT\System32\STDVCL40.DLL)
// ************************************************************************ //
#ifndef   __MSMQ_OCX_h__
#define   __MSMQ_OCX_h__

#pragma option push -b -w-inl

#include <utilcls.h>
#if !defined(__UTILCLS_H_VERSION) || (__UTILCLS_H_VERSION < 0x0500)
//
// The code generated by the TLIBIMP utility or the Import|TypeLibrary 
// and Import|ActiveX feature of C++Builder rely on specific versions of
// the header file UTILCLS.H found in the INCLUDE\VCL directory. If an 
// older version of the file is detected, you probably need an update/patch.
//
#error "This file requires a newer version of the header UTILCLS.H" \
       "You need to apply an update/patch to your copy of C++Builder"
#endif
#include <olectl.h>
#include <ocidl.h>
#if !defined(_NO_VCL)
#include <stdvcl.hpp>
#endif  //   _NO_VCL
#include <ocxproxy.h>

...

Как видите, этот файл был сгенерирован довольно давно :). Мне удалось создать этот проект с помощью C++ Builder 2010 в 64-разрядной версии Windows 7. Но когда я устанавливаю XE2 и пытаюсь исправить все мелкие проблемы, которые возникают, поскольку теперь по умолчанию используется STRICT вместо NO_STRICT, я сталкиваюсь с совсем другой вопрос. Вышеупомянутый файл и другие, созданные таким же образом, больше не работают должным образом.

Я получаю ошибки, как

[Ошибка BCC32] MSMQ_OCX.h(66): квалификатор E2090 «Oleserver» не является именем класса или пространства имен

Поиск MQOA.DLL, который, по его утверждениям, не использовался, кажется, что ничего подобного не существует. Кто-нибудь знает, как обойти подобные проблемы при обновлении проекта до XE2? Проект пережил обновления ранее и, наконец, был обновлен до C++ Builder 2010. Но я больше работаю с Visual Studio, поэтому многие материалы Embarcadero — это новая территория.


person inquam    schedule 09.02.2012    source источник
comment
Вы пытались повторно импортировать TypeLibrary в XE2 вместо повторного использования вашего старого файла .h?   -  person Remy Lebeau    schedule 10.02.2012
comment
Как мне это сделать? Я думал, что должен искать используемый файл, например C:\WINNT\system32\MQOA.DLL в данном случае. Но этого файла нет в Windows 7.   -  person inquam    schedule 10.02.2012
comment
Если у вас нет установленного файла, как вы ожидаете, что ваше приложение будет использовать TypeLibrary/Object во время выполнения, даже если ваш проект скомпилирован нормально?   -  person Remy Lebeau    schedule 10.02.2012
comment
Это как раз странно. Так как в C++ Builder 2010 компилируется и работает точно такой же код и dll все равно нету. Я считаю, что Embarcadero — это сгусток магии Вуду :)   -  person inquam    schedule 12.02.2012
comment
Вам не нужна DLL для компиляции. Но вам это нужно во время выполнения, если вы на самом деле используете COM-объекты, определенные в TypeLibrary.   -  person Remy Lebeau    schedule 13.02.2012
comment
Все еще не объясняет, как он может скомпилироваться на C++ Builder 2010, но не на XE2 на той же машине :)... Ну, я думаю, я копну глубже.   -  person inquam    schedule 13.02.2012
comment
Вы пробовали просто отключить STRICT?   -  person Remy Lebeau    schedule 14.02.2012
comment
Вы нашли решение? У меня такая же проблема при обновлении с C++ Builder 2010 до XE2. В моем проекте написано: [Ошибка BCC32] atlmod.h(487): E2090 Qualifier 'Utilcls' не является именем класса или пространства имен   -  person user872661    schedule 26.03.2012


Ответы (1)


В итоге я повторно импортировал необходимые библиотеки типов и удалил старые, как предложил Реми Лебо. В моем случае это были библиотеки Microsoft для очередей сообщений и XML.

Обратите внимание, что некоторые другие проблемы, выдающие аналогичные сообщения об ошибках, МОГУТ быть связаны с тем, что компилятор просто запутался :). Попробуйте скомпилировать без определения NO_STRICT.

person inquam    schedule 27.03.2012