andreapav
17-11-2015, 10:27
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:
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 ();
}
questa è l'implementazione:
// 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;
}
ho: LNK2019 e LNK1120.
Sto sbagliando così di tanto??
Grazie!
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:
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 ();
}
questa è l'implementazione:
// 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;
}
ho: LNK2019 e LNK1120.
Sto sbagliando così di tanto??
Grazie!