Ich verwende API in C++ geschrieben in meinem Code (Schreiben in C#). API benötigt einen Parameter als Zeiger auf Struktur. Die Struktur besteht aus „Int“ s und Char Arrays: beispielÜbergabe einer Struktur an C++ API mit Marshal.StructureToPtr in C#
unsafe public struct ToBePassed
{
Int32 Num1;
Int32 Num2;
Char[] Data; // or fixed Char Data[255];
}
I kann nicht direkt mit der Struktur Zeiger auf API übergeben, da in diesem Fall I Störung erhalten als „Pointers nicht gemarshallt Strukturen verweisen kann“ . Code wird erfolgreich kompiliert, aber dieser Fehler kommt, wenn ich den Code ausführe (Debug).
Jetzt habe ich zwei Optionen: 1st: - Passing Struktur von Ref: Ich möchte fragen, eine API erfordert einen Struktur Pointer kann die Adresse erhalten, wenn ich die Struktur durch Ref übergeben. Beachten Sie, dass die API Daten in "Char [] Data" zurückgibt.
2.: - Verwendung von Marshal.StructureToPtr: Dies wird den Strukturzeiger in IntPtr konvertieren. Wieder ist der Zweifel gleich, Wird diese API korrekt empfangen?
Danke für Ihre Zeit!
Grüße, Swanand
Vielen Dank sehr sehr! Das war großartig!! Eine Frage, kann die API Daten im Char Array zurückgeben? – Swanand
AFAIK, ja. Die nicht verwaltete API kann den Speicher wie jeden anderen Speicher verwenden, da sie nicht verwaltet wird. In diesem Fall würden Sie die Struktur zurückmelden, um das Ergebnis in den verwalteten Code zurückzuversetzen. –
Das funktioniert gut .... Aber ich bin mit einem weiteren Problem konfrontiert, jetzt möchte ich Daten an die API übergeben (sagen WriteToAPI Version der oben genannten API) Ich werde jetzt Daten an API übergeben. Da diese Char-Daten jedoch nicht die Größe 255 haben (ich möchte Daten variabler Größe übergeben), wird der Fehler "Typ kann nicht Marshalled sein, da die Länge einer Embedded-Array-Instanz nicht mit der angegebenen Länge im Layout übereinstimmt" – Swanand