Ok, tutorial. Tiene una clase de C++ NativeClass
que desea exponer a C#.
class NativeClass {
public:
void Method();
};
1) Cree un proyecto de C++/CLI. Enlace a su biblioteca C++ y encabezados.
2) Cree una clase contenedora que exponga los métodos que desee. Ejemplo:
#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) Agregue una referencia a su proyecto C++/CLI en su proyecto C#.
4) utiliza el tipo de envoltorio dentro de una instrucción using:
using (var nativeObject = new NativeClassWrapper()) {
nativeObject.Method();
}
La instrucción using asegura Dispose() se llama, que se ejecuta inmediatamente el destructor y destruye el objeto nativo. De lo contrario, tendrá fugas de memoria y probablemente morirá horriblemente (no usted, el programa). Nota: The Dispose() method is magically created for you.
¿Las clases contenedoras son públicas? La declaración debe ser "clase de referencia pública {...};" – Asik
Lo sé. Lo que estoy preguntando es que tal cosa es posible: 'public ref class wrapper_class = native_class;'? ¿Son posibles estos enfoques? – Haix64
No es tan simple. La clase contenedora alojaría un objeto native_class y crearía métodos wrapper para todos los métodos de native_class que desea exponer. Los métodos de envoltura simplemente marcan los parámetros y delegan la llamada al objeto native_class. – Asik