Devo chiamare una funzione da un C api contenuto in una DLL. prototipo di funzione appare come segue ....Come marshall void * con piattaforma invocata
int func(char* name, void* value);
in cui il contenuto del valore del puntatore possono riferirsi a qualsiasi tipo dipendente dal nome passato. Non sono sicuro di come configurare Dll inport per eseguire correttamente questo vuoto *. Ihave stato sperimentando IntPtr che sembra funzionare whe il valore è un int, ma non riesco a recuperare i valori correttamente per carri ecc
Sto cercando di importare la funzione come questa ...
[DllImport("dllname.dll", CharSet = CharSet.Ansi)]
public static extern int func(string name, ref IntPtr value);
nota dei pls quel valore è un risultato. Un puntatore a un valore di qualsiasi tipo, ovvero l'indirizzo in una regione globale di memoria di un valore di un tipo noto (noto al chiamante). In un c prog, il chiamante dovrebbe quindi trasmettere questo vuoto * al tipo desiderato e alla dereferenziazione per ottenere il valore effettivo memorizzato in tale posizione. Le risposte date finora sembrano basarsi sul presupposto che la funzione scriverà il risultato alla posizione del puntatore passata. La mia colpa non è stata troppo specifica. Scusate. C# non è la mia borsa, e io non so nemmeno se IntPtr è il modo di andare qui ...
Sarei dovuto essere più specifico scusa. Il valore IntPtr è un output. Nel caso di questa funzione sarà un puntatore a un valore che può essere di qualsiasi tipo. Ci si aspetta che il chiamante conosca il tipo che stanno cercando di recuperare. – matt
@matt - la risposta è sempre la stessa - vedi modifica. –
@matt - dai un'occhiata alla risposta e ai commenti di Hans - questa è la soluzione migliore. –