Представление класса C++ ISO к C#

Я должен выставить некоторые классы C++ C# (я основываюсь на Linux, с помощью моно, таким образом, COM не является опцией),

Данные, которые я собрал до сих пор, свидетельствуют, что лучший способ приблизиться к этому:

  1. Запишите обертке C++. Класс сети вокруг класса C++ ISO
  2. Используйте C++. Классы сети от C#

У меня есть следующие вопросы:

  • Во-первых, действительно ли это - "лучший" способ достигнуть цели представления классов C++ ISO к C#?
  • До сих пор, хотя, я не видел примеров, которые на самом деле показывают, как сделать это - кто-либо может предложить, чтобы некоторые ссылки или фрагмент кода показали, как это сделано для фиктивного класса?
  • Как я могу отправить асинхронные уведомления о сообщении от кода C++ до кода C#?. Идеально, я хотел бы заставить класс C# генерировать событие с полученными данными как аргумент
14
задан Deduplicator 9 March 2015 в 20:37
поделиться

2 ответа

Вы не можете создавать классы C ++ /. NET в Linux с помощью Mono. Mono не поддерживает Managed C ++ или C ++ / CLI, поэтому нет способа «написать оболочку C ++. Net класс вокруг класса ISO C ++».

Лучшим вариантом для этого является создание C API для вашего класса C ++, доступ к которому можно получить через Platform Invoke .

При этом одним из вариантов упрощения этого является использование SWIG для создания оберток для вас. Он поддерживает создание оболочек C # из классов C ++ (а также оболочек для других языков) и хорошо работает в Linux / Mono.


Редактировать:

Официальное сообщение «Mono не поддерживает смешанный режим C ++ / CLI» см. На странице Языки :

Важно отметить, что любой язык, компилируемый в чистый IL должен работать под Mono.Некоторые языки, такие как Microsoft Managed C ++, не всегда компилируются в чистый IL, поэтому они не всегда будут работать должным образом, поскольку они не являются полностью независимыми от платформы.

C ++ / CLI для нативного взаимодействия требует не-чистого IL, поэтому он не будет работать в Mono.

8
ответ дан 1 December 2019 в 15:01
поделиться

вам нужно было написать управляемую оболочку C ++ вокруг вашего iso-класса C ++, как этот

 public ref class MyWrapper
    {
    public:
    MyWrapper (void)
    {
    pObj = new CMyUnmanagedClass();
    }
    ~MyWrapper (void)
    {
    delete pObj;
    }
    int foo(void)
    {
    //pass through to the unmanaged object
    return pObj->foo();
    }
    private:
    CMyUnmanagedClass* pObj;
    };

Надеюсь, эта помощь касается

0
ответ дан 1 December 2019 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: