2011-02-01 11 views
0

C++ Builder 4プロジェクトで使用する必要がある.NET COM DLLを作成しました。インポートタイプライブラリ機能を使用してDLLをインポートすることができます(実際にはビルド時にDLLに付属するTLBファイルをインポートします)。これは、私のC++ Builder \ ImportsフォルダにComponent_TLB.hを作成します。私はその後、私のプロジェクトでは、この_TLBファイルを#includeし、私は次の操作を行うことができるよ:意図したとおりにC++ Builder 4での.NET COM DLLの使用 - 文字列とSystem :: Stringのあいまいさ

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は、私のプロジェクトに含まれているので、私がために使用のように、私は「文字列」タイプを使用することができないということです。次の行:

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

このmscorlibは、独自の文字列型か何かを持っているように見えます...私が見つけた:

extern const GUID IID__String; 

String abc; 

は私に次のエラーを..gives

extern const GUID CLSID_String; 

I私のプロジェクトではString型をたくさん使っていますが、String型ですべての行をコード化せずにSystem :: Stringを使うようにコンパイラを強制するにはどうすればいいですか?

答えて

1

これらの識別子は、グローバル名前空間

namespace Mumble { 
    #include Component_TLB.h 
} 
+0

に追加されませんので、私はあなたの提案を試みたが、私は次のエラーを取得、名前空間を使用してください:[C++エラー] utilcls.h(2332):E2029」をIDispatch 'は以前に定義されたクラスまたは構造体でなければなりません。 – jplanglais

+0

申し訳ありませんが、utilcls.hは何であるか分かりません。 –

+0

mscorlib_TLB.hに次のようにインクルードされています:#include jplanglais

関連する問題