0

関数Import Type Libraryを使用したと思われる C++ Builder に大規模なプロジェクトがあります。その中には、このようなヘッダーを持つファイルがあります

// ************************************************************************ //
// 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>

...

ご覧のとおり、このファイルはかなり前に生成されたものです:)。Windows 7 64 ビットでC++ Builder 2010を使用して、このプロジェクトをビルドできました。しかし、XE2をインストールして、デフォルトでNO_STRICTではなくSTRICTになったために発生する小さな問題をすべて修正しようとすると、まったく別の問題に遭遇します。上記のファイル、同じ方法で生成された他の広告は、意図したとおりに動作しなくなります。

次のようなエラーが表示されます

[BCC32 エラー] MSMQ_OCX.h(66): E2090 修飾子 'Oleserver' はクラスまたは名前空間の名前ではありません

MQOA.DLLを探していると、そのようなものは何も使用されていないように見えます。プロジェクトを XE2 に更新する際に、この種の問題を回避する方法について何かアドバイスはありますか? このプロジェクトは以前のアップグレードに耐え、最後に C++ Builder 2010 にアップグレードされました。しかし、私は Visual Studio の方が好きなので、Embarcadero の多くは新しい領域です。

4

1 に答える 1

1

Remy Lebeau の提案に従って、必要なタイプ ライブラリを再インポートし、古いライブラリを削除することになりました。私の場合は、メッセージ キューXML用の Microsoft のライブラリでした。

同様のエラーメッセージを表示する他のいくつかの問題は、コンパイラが単に混乱している可能性があることに注意してください:)。NO_STRICTを定義せずにコンパイルしてみてください。

于 2012-03-27T07:42:08.873 に答える