Ich versuche, eine DLL zur Arbeit zu bekommen.Marshalling C++ int * zu C#
Die DLL ist in C++ geschrieben und muss int * an C# übergeben. Ich verbrachte einige Tage damit, das zu arbeiten, und es scheitert. Ich fange an, mir die Haare auszuziehen, weil ich nicht herausfinden kann, was falsch ist. Ich habe alles versucht. Ich bin nicht so vertraut mit C++ wie ich mit C# bin, so könnte Problem von dort kommen ...
Es liest sich gut aus der DLL, aber die zurückgegebenen Werte sind nicht korrekt. Ich habe die Eingänge entfernt, und ich versuche nur, ein Test-Array durchzubekommen. Die Funktion, die ich in C++ verwende ist:
extern "C" EAGLE128DLL_API int* encryptFunc()
{
//return encrypt(x, Q);
int t[128];
for(int i = 0; i < 128; i++)
{
t[i] = 5;
}
return t;
};
Der C# -Code Ich benutze diese Funktion aufzurufen, ist wie folgt:
[DllImport("C:\\Users\\Leon\\Documents\\Visual Studio 2010\\Projects\\Eagle128DLL\\Release\\Eagle128DLL.dll")]
public static extern IntPtr encryptFunc();
...
IntPtr outputPtr = encryptFunc();
int[] output = new int[128];
Marshal.Copy(outputPtr, output, 0, 128);
Die Werte innerhalb Ausgabegruppe sollte alle 5s sein. Aber was ich bekomme ist: 16187392, 16190224 .. etc (nicht 5)
Sie sollten auch in der Lage sein, das [return: MarshalAs] -Attribut zu verwenden, um int [] anstelle von IntPtr zurückzugeben und den Marshall die Arbeit für Sie erledigen zu lassen: [return: MarshalAs (UnmanagedType.LPArray, SizeConst = 128) ] public static extern int [] encryptFunc(); – jeffora