Ok, Tutorial. Sie haben eine C++ - Klasse NativeClass
, die Sie für C# bereitstellen möchten.
class NativeClass {
public:
void Method();
};
1) Erstellen Sie ein C++/CLI-Projekt. Verknüpfen Sie mit Ihrer C++ - Bibliothek und Kopfzeilen.
2) Erstellen Sie eine Wrapper-Klasse, die die gewünschten Methoden verfügbar macht. Beispiel:
#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) Fügen Sie einen Verweis auf Ihr C++/CLI-Projekt in C# Projekt.
4) Mit dem Wrapper innerhalb einer Anweisung using:
using (var nativeObject = new NativeClassWrapper()) {
nativeObject.Method();
}
die Anweisung using stellt sicher entsorgen() aufgerufen wird, die unmittelbar auf den destructor läuft und zerstört das native Objekt. Sie werden sonst Speicherlecks haben und wahrscheinlich schrecklich sterben (nicht Sie, das Programm). Hinweis: The Dispose() method is magically created for you.
Sind die Wrapper-Klassen öffentlich? Deklaration sollte "public ref class {...} sein;" – Asik
Ich weiß das. Was ich frage ist, dass so etwas möglich ist: 'public ref class wrapper_class = native_class;'? Sind solche Ansätze möglich? – Haix64
Es ist nicht so einfach. Die Wrapper-Klasse würde ein native_class-Objekt hosten und Wrapper-Methoden für alle Methoden von native_class erstellen, die Sie bereitstellen möchten. Die Wrapper-Methoden ordnen die Parameter nur an und delegieren den Aufruf an das native_class-Objekt. – Asik