Non riesco a capire come restituire un array da una DLL C++ esportata al mio programma C#. L'unica cosa che ho trovato su google è stata l'utilizzo di Marshal.Copy() per copiare l'array in un buffer, ma questo non mi dà i valori che sto cercando di restituire, non so cosa mi stia dando.Restituisce array C++ a C#
Ecco quello che ho provato:
funzione esportata:
extern "C" __declspec(dllexport) int* Test()
{
int arr[] = {1,2,3,4,5};
return arr;
}
C# parte:
[DllImport("Dump.dll")]
public extern static int[] test();
static void Main(string[] args)
{
Console.WriteLine(test()[0]);
Console.ReadKey();
}
So che il tipo di ritorno int [] è probabilmente sbagliato a causa della differenze gestite/non gestite, non ho proprio idea di dove andare da qui. Non riesco a trovare una risposta per nulla se non restituire array di caratteri a stringhe, non array interi.
Ho immaginato il motivo per cui i valori che ricevo con Marshal.Copy non sono quelli che sto restituendo è perché l'array 'arr' nella funzione esportata viene eliminato ma non sono sicuro al 100%, se qualcuno può chiarire che sarebbe grandioso.
http://stackoverflow.com/questions/3776485/marshal-c-int-array-to-c-sharp Questo può aiutare –
[Non va bene.] (Http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessible-outside-its-scope) – chris
Grazie Chris, ero così preso da questo che ho dimenticato quello che stavo facendo. Ho intenzione di cambiare il mio codice un po ', in questo modo ho la mia funzione esportata prendere l'indirizzo in un buffer e riempire il buffer da lì. – David