PDA

View Full Version : Problema: usare codice c++ in c#


rowiz
02-05-2007, 12:29
Buongiorno, ho un grande problema: ho bisogno di utilizzare una libreria, gratuita, che ho trovato in giro; di questa risorsa posseggo il codice sorgente, che è scritto in C++.
Il progetto invece è in Visual C#. Potete aiutarmi?
Considerate che sono pressochè un newby, e non ho grandissime conoscenze.
Vi ringrazio anticipatamente

RaouL_BennetH
02-05-2007, 13:11
Se è una dll, che tu sappia è una libreria basata su COM oppure no?

rowiz
02-05-2007, 13:15
Se è una dll, che tu sappia è una libreria basata su COM oppure no?

come posso capirlo?

RaouL_BennetH
02-05-2007, 13:21
Beh, se è libera, e tu hai sorgenti, dovrebbe anche esserne documentato l'uso (credo). Altrimenti prova a postare il link dove l'hai prelevata (semprechè sia lecito :D ) e vedrò se potrò esserti di aiuto.

rowiz
02-05-2007, 13:47
Il link è lecitissimo.
http://www.surina.net/soundtouch/index.html

tomminno
02-05-2007, 21:59
Buongiorno, ho un grande problema: ho bisogno di utilizzare una libreria, gratuita, che ho trovato in giro; di questa risorsa posseggo il codice sorgente, che è scritto in C++.
Il progetto invece è in Visual C#. Potete aiutarmi?
Considerate che sono pressochè un newby, e non ho grandissime conoscenze.
Vi ringrazio anticipatamente

Devi compilarla come DLL e tramite il meccanismo del P/Invoke importare i metodi esportati dalla libreria

rowiz
03-05-2007, 09:01
Proverò a cercare qualcosa di più su questo metodo; c'è differenza tra P/Invoke e il comando DLLImport? I metodi esportati dalla libreria sono quelli che all'inizio hanno la dicitura "extern "C" "?

rowiz
03-05-2007, 10:16
Altrimenti, dato che ho il codice in c++ della libreria, non potrei provare una sorta di "traduzione"?

tomminno
03-05-2007, 14:00
Altrimenti, dato che ho il codice in c++ della libreria, non potrei provare una sorta di "traduzione"?

Difficile visto che utilizza parti in assembly. Oltretutto poi dovresti testare se effettivamente il tuo porting si comporta allo stesso modo dell'originale. Sicuramente più facile affidarsi alle procedure messe a disposizione dal C# per l'invocazione di metodi unmanaged.

tomminno
03-05-2007, 14:03
Proverò a cercare qualcosa di più su questo metodo; c'è differenza tra P/Invoke e il comando DLLImport? I metodi esportati dalla libreria sono quelli che all'inizio hanno la dicitura "extern "C" "?

Il Process Invoke si realizza includendo il namespace System.Runtime.InteropServices e usando DLLImport.
Generalmente si, extern "C" indica al compilatore C++ di non decorare i nomi.