ich mit Code bin eine Schnittstelle, die eine char**
nimmt (das heißt, ein Zeiger auf eine Zeichenfolge):Rangierung ein char ** in C#
int DoSomething(Whatever* handle, char** error);
Im Grunde ist es ein Handle auf seinen Zustand annimmt, und wenn etwas schief geht, es gibt einen Fehlercode und gegebenenfalls eine Fehlermeldung (der Speicher extern zugeordnet ist und mit einer zweiten Funktion befreit. der Teil I figued out haben :)).
Ich aber bin nicht sicher, wie in C# zu handhaben in. Was ich habe, zur Zeit:
[DllImport("mydll.dll", CallingConvention = CallingConvention.Cdecl)]
private static unsafe extern int DoSomething(IntPtr handle, byte** error);
public static unsafe int DoSomething(IntPtr handle, out string error) {
byte* buff;
int ret = DoSomething(handle, &buff);
if(buff != 0) {
// ???
} else {
error = "";
}
return ret;
}
Ich habe um stocherte, aber ich kann nicht herausfinden, wie man das sich in eine byte[]
, geeignet ist, auf dem richtigen Weg zu UTF8Encoding.UTF8.GetString()
Bin ich füttern?
EDIT: Um noch deutlicher zu machen, die Bibliotheksfunktion reserviert Speicher, die durch den Aufruf eine andere Bibliotheksfunktion befreit werden müssen. Wenn eine Lösung mich nicht mit einem Zeiger verlässt, den ich freilassen kann, ist die Lösung inakzeptabel.
Frage Bonus: Wie oben angedeutet, diese Bibliothek verwendet UTF-8 für die Saiten. Muss ich etwas Besonderes in meiner P tun/Invokes, oder einfach nur string
für normale const char*
Parameter verwenden?
Haben Sie 'out StringBuilder' probiert? – leppie
Ich habe einen zusätzlichen Schnitt hinzugefügt, der das Grundproblem erklärt. –