Подтвердить что ты не робот

С++/CLI-оболочка для С++ для использования в качестве ссылки в С#

Название объясняет. У меня есть родные DLL С++, которые я пишу обертки С++/CLI для, которые, в свою очередь, будут импортированы в С# в качестве ссылки.

Проблема в том, что в С# я не вижу классы, которые у меня есть в оболочке (импортированные из DLL).

Какие ключевые слова я должен использовать и КАК повторно объявить мои собственные объекты С++, чтобы они стали видимыми на С#?

4b9b3361

Ответ 1

Хорошо, учебник. У вас есть класс С++ NativeClass, который вы хотите выставить на С#.

class NativeClass { 
public:
    void Method();
};

1) Создайте проект С++/CLI. Ссылка на вашу библиотеку С++ и заголовки.

2) Создайте класс-оболочку, который предоставляет методы, которые вы хотите. Пример:

#include "NativeClass.h"

public ref class NativeClassWrapper {
    NativeClass* m_nativeClass;

public:
    NativeClassWrapper() { m_nativeClass = new NativeClass(); }
    ~NativeClassWrapper() { this->!NativeClassWrapper(); }
    !NativeClassWrapper() { delete m_nativeClass; }
    void Method() {
        m_nativeClass->Method();
    }
};

3) Добавьте ссылку на свой проект С++/CLI в проекте С#.

4) Используйте тип оболочки внутри оператора using:

using (var nativeObject = new NativeClassWrapper()) {
    nativeObject.Method();
}

Оператор using обеспечивает вызов Dispose(), который немедленно запускает деструктор и уничтожает собственный объект. В противном случае у вас будет утечка памяти и, вероятно, умрет ужасно (не вы, программа). Примечание: Метод Dispose() создан для вас волшебным образом.