2011-02-01 6 views
0

Я создал библиотеку .NET COM DLL, которую мне нужно использовать в моем проекте C++ Builder 4. Я могу импортировать DLL с помощью библиотеки типов импорта (фактически я импортирую TLB-файл, который поставляется с DLL, когда я его создаю). Это создает Component_TLB.h в моей папке C++ Builder \ Imports. Затем я #include этот _TLB файл в моем проекте, и я могу сделать следующее:Использование .NET COM DLL в C++ Builder 4 - Неоднозначность между строками и системой :: Strings

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

Это работает как задумано.


Component_TLB.h создан из функциональности "Import Type Library" включает в себя (помимо всего прочего) 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», как я раньше. Следующая строка:

String abc; 

..gives мне следующую ошибку:

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

Похоже, что это mscorlib имеет свой собственный тип String, или что-то ... Я нашел:

extern const GUID IID__String; 

и

extern const GUID CLSID_String; 

I используйте String типа LOT в моем проекте, как я могу заставить «заставить» компилятор использовать System :: String без необходимости перекодировать все строки со строковым типом или как я могу обойти это?

ответ

1

Используйте пространство имен, так что эти идентификаторы не добавляются в глобальное пространство имен

namespace Mumble { 
    #include Component_TLB.h 
} 
+0

Я попробовал ваше предложение, но затем я получаю следующее сообщение об ошибке: [C++ Error] utilcls.h (2332): E2029 ' IDispatch 'должен быть ранее определенным классом или структурой. – jplanglais

+0

Извините, не знаю, что такое utilcls.h. –

+0

Он включает mscorlib_TLB.h следующим образом: #include jplanglais