Я создал библиотеку .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 без необходимости перекодировать все строки со строковым типом или как я могу обойти это?
Я попробовал ваше предложение, но затем я получаю следующее сообщение об ошибке: [C++ Error] utilcls.h (2332): E2029 ' IDispatch 'должен быть ранее определенным классом или структурой. – jplanglais
Извините, не знаю, что такое utilcls.h. –
Он включает mscorlib_TLB.h следующим образом: #include –
jplanglais