Использование .NET COM DLL в C++ Builder 4 — неоднозначность между строками и System::Strings

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

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», как раньше. Следующая строка:

String abc;

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

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

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

extern const GUID IID__String;

и

extern const GUID CLSID_String;

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


person jplanglais    schedule 01.02.2011    source источник


Ответы (1)


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

namespace Mumble {
   #include Component_TLB.h
}
person Hans Passant    schedule 01.02.2011
comment
Я попробовал ваше предложение, но затем получаю следующую ошибку: [Ошибка C++] utilcls.h(2332): E2029 «IDispatch» должен быть ранее определенным классом или структурой. - person jplanglais; 01.02.2011
comment
Извините, я понятия не имею, что такое utilcls.h. - person Hans Passant; 01.02.2011
comment
Он включается с помощью mscorlib_TLB.h следующим образом: #include ‹vcl/utilcls.h› - person jplanglais; 01.02.2011