Я пытаюсь использовать стороннюю .net dll в C ++ Builder (10.3).
Я создаю файл .tlb для dll с помощью regasm.exe. Затем я иду в «Импорт библиотеки типов» и выбираю .tlb, который был зарегистрирован, а затем выбираю установку в новый пакет.
При сборке пакета я получаю ошибки в сгенерированном файле mscorlib_TLB.h (у меня нет опыта работы с .net, но я понимаю, что mscorlib - это базовый класс, необходимый для .net).
Вот некоторые сообщения об ошибках и строки источника:
[ошибка bcc32c] mscorlib_TLB.h (2321): объявление анонимной структуры должно быть определением:
interface DECLSPEC_UUID("{84E7AC09-795A-3EA9-A36A-5B81EBAB0558}") _Nullable;
[ошибка bcc32c] mscorlib_TLB.h (2322): ожидаемый тип:
typedef TComInterface<_Nullable, &IID__Nullable> _NullablePtr;
[ошибка bcc32c] mscorlib_TLB.h (4426): C ++ требует спецификатор типа для всех объявлений:
typedef _Nullable Nullable;
[ошибка bcc32c] mscorlib_TLB.h (4426): спецификатор обнуляемости '_Nullable' нельзя применить к типу без указателя 'int':
typedef _Nullable Nullable;
[ошибка bcc32c] mscorlib_TLB.h (12060): объявление анонимной структуры должно быть определением:
interface _Nullable : public IDispatch
[ошибка bcc32c] mscorlib_TLB.h (22823): ожидается ')'
mscorlib_TLB.h (22822): чтобы соответствовать этому '(':
virtual HRESULT STDMETHODCALLTYPE MarshaledObject(VARIANT obj/*[in]*/,
Mscorlib_tlb::_ObjRef* or/*[in]*/) = 0; // [-1]
Я также пытался импортировать .net dll с помощью «Импорт сборки .NET», но это дает мне «OLE Error».
Есть идеи, что мне не хватает?
EDIT:
Я написал свою собственную библиотеку классов (я никогда раньше не использовал C #, я надеялся, что смогу использовать .NET dll в C ++ Builder без этого) и попытался импортировать ее в C ++ Builder. Но я получаю точно такие же ошибки для (в C ++ Builder) сгенерированного mscorlib_TLB.h. Однако эту библиотеку я могу импортировать с помощью опции «Импорт сборки .NET».
using System;
using System.Runtime.InteropServices;
namespace ClassLibraryTest
{
[ClassInterface(ClassInterfaceType.None)]
public class TestKlass
{
public int Funkt1(int x)
{
x = x + 1;
return x;
}
public int Funkt2(int x)
{
x = x + 2;
return x;
}
public string Funkt3(string str)
{
return "str:" + str;
}
}
}
Я попробовал инструмент Crosstalk от Atozed для использования сборок .NET в C ++ Builder. Там я могу импортировать .NET DLL. Но только библиотека, которую я написал, требуемая DLL также дает мне ошибки там. Теперь я планирую написать свой собственный (чистый) интерфейс на C #, использовать его для общения с нужной DLL и импортировать в C ++ Builder через Crosstalk.