Ошибка компиляции при импорте библиотеки типов .net - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь использовать стороннюю .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.

...