Sto usando API scritte in C++ nel mio codice (scrivendo in C#). API richiede un parametro come puntatore alla struttura. la struttura è costituita s "INT" e Char array: per esempioPassare una struttura all'API C++ utilizzando Marshal.StructureToPtr in C#
unsafe public struct ToBePassed
{
Int32 Num1;
Int32 Num2;
Char[] Data; // or fixed Char Data[255];
}
non posso passare direttamente il puntatore struttura API perché in questo caso, sto ottenendo errore come "puntatori non può fare riferimento strutture marshaled" . Il codice viene compilato correttamente ma questo errore si verifica quando eseguo (debug) il codice.
Ora ho due opzioni: 1 °: - Passing Structure by Ref: Voglio chiedere un API che richiede un puntatore di struttura può ricevere l'indirizzo quando passo la struttura di riferimento. Nota che l'API restituirà i dati in "Char [] Data".
2: - Utilizzo di Marshal.StructureToPtr: consente di convertire il puntatore di struttura in IntPtr. Di nuovo il dubbio è lo stesso, l'API lo riceverà correttamente?
Grazie per il tuo tempo!
saluti, Swanand
Grazie mille! È stato perfetto!! Una domanda, l'API può restituire i dati nella matrice di caratteri? – Swanand
AFAIK, sì. L'API non gestita può utilizzare la memoria puntata come qualsiasi altra memoria poiché non è gestita. In tal caso, vorrai tornare alla struttura per ottenere il risultato nel codice gestito. –
Sta funzionando bene ... Ma sto affrontando un altro problema, ora voglio passare i dati all'API (diciamo la versione WriteToAPI dell'API sopra menzionata). Passerò ora i dati all'API. Ma dato che questi dati Char non sono di dimensione 255 (voglio passare dati di dimensioni variabili) danno errore come "Tipo non può essere effettuato il marshalling perché la lunghezza di un'istanza di Array incorporato non corrisponde alla lunghezza dichiarata nel layout" – Swanand