Я создал .NET COM DLL, которую мне нужно использовать в моем проекте C ++ Builder 4. Я могу импортировать DLL, используя функцию импорта библиотеки типов (фактически я импортирую файл TLB, который поставляется вместе с DLL при сборке). Это создает Component_TLB.h в моей папке C ++ Builder \ Imports. Затем я #include этот файл _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;
Я использую строковый тип A LOT в своем проекте, как я могу «заставить» компилятор использовать System :: String без необходимости перекодировать все строки с строковым типом или как я могу обойти это?