Я создал .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 или как я могу обойти это?