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を使用させるにはどうすればよいですか、またはこれを回避するにはどうすればよいですか?