Ich habe hier eine C-
DLL, für die ich einen Wrapper schreiben muss. Im Großen und Ganzen funktioniert das auch recht gut, aber bei bestimmten Funktionen bekomme ich keine sinnvollen Daten zurück. Es gibt in der
DLL teilweise folgende Vorgehensweise: man ruft eine Funktion auf, die einen bestimmten Speicherblock reserviert und den Zeiger darauf zurückgibt. Diesen Zeiger übergibt man dann in anderen Funktionen, um bestimmte Informationen zu erhalten. Anschließend gibt man den Speicher wieder frei, indem man eine dafür bestimmte Funktion aufruft. Die Definitionen sehen so aus:
Code:
Buffer* getBuffer()
void freeBuffer(Buffer *buffer)
void getBufferInfo(const Buffer* buffer, const unsigned char** Info, uint32_t* infoLength)
So wie ich das verstehe handelt es sich bei Info um einen Zeiger auf einen Zeiger auf ein
Ansi-Zeichen. Meine Übersetzung bislang (Aufrufkonvention ist durchgängig cdecl):
Delphi-Quellcode:
function getBuffer: Pointer;
procedure freeBuffer(buffer: Pointer);
procedure getBufferInfo(const buffer: Pointer; out Info: PAnsiChar; out infoLength: UINT32);
Ich habe auch schon testhalber PAnsiChar durch PByte ersetzt und dann wild herumgecastet, Streams eingesetzt etc., immer mit dem selben Endergebnis (teilweise nicht druckbare Zeichen im String, der eigentlich einen Base64-kodierten Hash enthalten soll).
Was mache ich falsch?