1

C ++Builder4プロジェクトで使用する必要のある.NETCOMDLLを作成しました。タイプライブラリのインポート機能を使用してDLLをインポートできます(実際、DLLをビルドするときにDLLに付属のTLBファイルをインポートします)。これにより、C ++ Builder\ImportsフォルダーにComponent_TLB.hが作成されます。次に、この_TLBファイルをプロジェクトに#includeすると、次のことができるようになります。

TCOM_Create theDLL;
theDLL = CoCreate::Create();
theDLL->FunctionX(paramy);

これは意図したとおりに機能します。


「タイプライブラリのインポート」機能から作成されたComponent_TLB.hには、(とりわけ)mscorlibが含まれています。

#include "mscorlib_TLB.h"

...これは私のDLLの信頼できるようですが、コメントで見つけたものは次のとおりです。

// DepndLst: 
//   (1) v2.0 mscorlib, (C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.tlb)  **<---**
//   (2) v2.0 stdole, (C:\Windows\SysWOW64\stdole2.tlb)
//   (3) v4.0 StdVCL, (C:\Windows\SysWow64\STDVCL40.DLL)

問題は、このmscorlibが私のプロジェクトに含まれているため、以前のように「文字列」タイプを使用できないことです。次の行:

String abc;

..次のエラーが発生します:

[C++ Error] Unit1.cpp(23): E2015 Ambiguity between 'String' and 'System::String'.

このmscorlibには独自の文字列型か何かがあるようです...私は見つけました:

extern const GUID IID__String;

extern const GUID CLSID_String;

プロジェクトで文字列型ALOTを使用していますが、すべての行を文字列型で再コーディングせずに、コンパイラにSystem :: Stringを使用させるにはどうすればよいですか、またはこれを回避するにはどうすればよいですか?

4

1 に答える 1

2

名前空間を使用して、これらの識別子がグローバル名前空間に追加されないようにする

namespace Mumble {
   #include Component_TLB.h
}
于 2011-02-01T19:45:31.753 に答える