PDA

Visualizza la versione completa : [C++] Creazione di una DLL per C#


fleone
11-10-2011, 17:00
Salve a tutti, spero qualcuno mi possa chiarire le idee

io ho il seguente codice:


#include <Windows.h>
#include <d:\lavoro\c++\opennurbs_20110202\opennurbs\opennur bs.h>


extern "C" __declspec(dllexport) ON_3dVector Vcreate( ON_3dPoint p0, ON_3dPoint p1, double len) {

double d = len / (p0.DistanceTo(p1));

double d = len / (p0.DistanceTo(p1));

ON_3dVector v = ON_3dVector::ON_3dVector ((p0.x - p1.x) * d, (p0.y - p1.y) * d, (p0.z - p1.z) * d);

return v;
}





BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;

case DLL_PROCESS_DETACH:
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;
}

/* Returns TRUE on success, FALSE on failure */
return TRUE;
}

praticamente sto utilizzando visual c++ 2010 per generare una dll che contenga alcune funzioni che utilizzano le opernnurbs, il compilatore mi da alcuni errori tra cui questi:

warning C4190: 'Vcreate' è stato avviato al collegamento C, ma restituisce il tipo definito dall'utente 'ON_3dVector', che è incompatibile con il C
1> d:\lavoro\c++\opennurbs_20110202\opennurbs\opennur bs_point.h(931): vedere la dichiarazione di 'ON_3dVector'

qualcuno sa dirmi dove sbaglio? perdonate l'ignoranza, non ho mai programmato in c++ e purtroppo mi ci devo cimentare ed anche alla svelta perché dobbiamo riscrivere alcune funzioni abbastanza complicate scritte in c#... grazie in anticipo a chiunque mi aiuti. :ciauz:

linoma
11-10-2011, 17:15
Credo ti segnali il tuo presunto uso di una classe in C.

fleone
11-10-2011, 17:42
già ... ma è l'unico modo con cui sono riuscito a far vedere la dll da c#....

linoma
11-10-2011, 17:54
a parte la nomenclatura, ma credo i problemi potrebbero essere altri :)

fleone
11-10-2011, 17:56
si... immagino ... mi rendo conto che sono stato un po' vago nella domanda...
sto cercando di capire se sul web riesco a trovare qualche esempio pratico..

fleone
11-10-2011, 18:00
comunque... se io ho una classe in c++... come faccio a fare in modo che linguaggi esterni come il c# possano vederla? il C non supporta le classi, comprendo l'errore.

linoma
11-10-2011, 18:05
Nn so se sbaglio, ma credo che in ambiente windows, l'unico modo siano gli oggetti COM. Cmq puoi usare SWIG per fare switching tra i vari linguaggi.

fleone
11-10-2011, 18:08
Eh belin che dritta che mi hai dato!!!!

Grazie mille per l'aiuto!

:unz:

Loading