|
|||||||
|
|
|
![]() |
|
|
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: 19:58.



















