|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2008
Messaggi: 70
|
[C++/C#] wrapper classe C++ da usare in C#
Ciao a tutti.
Come posso creare un wrapper per una classe C++ (o meglio per dei suoi metodi) da usare in C#? So che potrei usare C++/CLI ma volevo evitare, so anche che posso esportare con extern __declspec(dllexport) solo metodi statici.. Volevo esportare metodi statici che però usano una classe c++ ma ho problemi di linker. Questo è il mio header: Codice:
CPPC *icpp; extern "C" { // esempio di metodo puramente statico __declspec(dllexport) int __cdecl StaticMethod (int a, int b); // __declspec(dllexport) bool __cdecl Init (); __declspec(dllexport) bool __cdecl Test_1 (int value); __declspec(dllexport) bool __cdecl Destroy (); } Codice:
// esempio di metodo puramente statico int StaticMethod (int value1, int value2) { return value1 + value2; } // metodi che si appoggiano su oggetto bool Init() { icpp = new CPPC(); return true; } bool Destroy() { icpp->~CPPC(); return true; } bool Test_1(int value) { if (icpp->Test_1(value)) // RIGA CHE DA PROBLEMI DI LINKER return true; return false; } Sto sbagliando così di tanto?? Grazie! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Ma la definizione di CPPC qual è? Così senza maggiori dettagli sembrerebbe che il linker non trovi l'implementazione di Test_1 per CPPC.
Qui il problema mi pare a monte dell'interfacciamento C++/C#. Comunque per far comunicare i 2 mondi le possibilità sono:
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Oct 2008
Messaggi: 70
|
Ciao. Il metodo è definito.
Il codice di CPPC è: Codice:
#pragma once class CPPC { public: CPPC(void); ~CPPC(void); //private: bool Test_1(int); int Test_Property_Get(); void Test_Property_Set(int); }; Ah, naturalmente il wrapper include l'header di CPPC: Codice:
#pragma once #include "CPPC.h" CPPC *icpp; extern "C" ... |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Oct 2008
Messaggi: 70
|
In CPPC.cpp avevo dichiarato il metodo senza indicare il nome della classe!!
Mancava "CPPC::"... Codice:
CPPC::SMT2_CPP(void) { } CPPC::~SMT2_CPP(void) { } // -- bool CPPC::Test_1(int val) { return (val > 0); } int CPPC::Test_Property_Get() { return 1; } void CPPC::Test_Property_Set(int val) { //return 1; } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:20.