Вы можете создавать классы .NET-оболочки для классов C++, создавая новый проект C++/CLI в своем решении, и для каждого класса, в котором вам действительно нужна оболочка, добавьте новый элемент Managed.ClassName.cpp
и проверьте шаблон ниже.
Managed.Rand.cpp (это будет новый файл в вашем C++/CLI проекта, и предполагается, ваш родной проект называется «Логика» и Rand
класс находится в Logic
пространстве имен)
#include "../Logic/Rand.cpp"
using namespace System;
namespace Logic {
namespace Managed {
public ref class Rand {
Logic::Rand * rand;
public:
Rand(UInt32 seed) { rand = new Logic::Rand(seed); }
!Rand() { delete rand; }
~Rand() { this->!Rand(); }
// Wrapper methods
UInt32 Next() { return rand->Next(); }
};
}
}
Помните, что метод !ClassName
(класс деструктора) заставляет класс автоматически реализовывать IDisposable
, поэтому вы должны обернуть свои экземпляры Managed.ClassName
в конструкцию использования или позвонить по телефону Dispose
, когда вы закончите. Короче говоря, здесь применяются обычные шаблоны использования IDisposable
.
Есть ли у вас доступа к источнику? –
Да, да. У меня есть весь проект. – Minato
Хорошо. Я сделал .NET-обертку для классов C++ на прошлой неделе, но я мог только заставить ее работать, когда я скомпилировал исходный код в проекте C++/CLI, который содержал как родные классы (* .hpp, * .cpp), так и мои управляемые C++ классы ('public ref class Foo {};') –