Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#1

C-Header Übersetzung

  Alt 11. Sep 2019, 08:14
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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat