Ok, tutorial. Hai una classe C++ NativeClass
che vuoi esporre a C#.
class NativeClass {
public:
void Method();
};
1) Creare un progetto C++/CLI. Link alla libreria e alle intestazioni C++.
2) Creare una classe wrapper che esponga i metodi desiderati. Esempio:
#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) Aggiungere un riferimento al progetto C++/CLI nel progetto C#.
4) utilizzare il tipo di involucro all'interno di un'istruzione using:
using (var nativeObject = new NativeClassWrapper()) {
nativeObject.Method();
}
L'istruzione using assicura Dispose() viene chiamato, che viene eseguito immediatamente il distruttore e distrugge l'oggetto nativo. Avrai altrimenti perdite di memoria e probabilmente morirai orribilmente (non tu, il programma). Nota: The Dispose() method is magically created for you.
Le classi wrapper sono pubbliche? La dichiarazione dovrebbe essere "public ref class {...};" – Asik
Lo so. Quello che sto chiedendo è che è una cosa del genere possibile: 'public ref class wrapper_class = native_class;'? Sono possibili questi approcci? – Haix64
Non è così semplice. La classe wrapper ospiterà un oggetto native_class e creerà metodi wrapper per tutti i metodi di native_class che si desidera esporre. I metodi wrapper eseguono il marshalling dei parametri e delegano la chiamata all'oggetto native_class. – Asik