PWideChar to String Problem mit DLL

Antworten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

PWideChar to String Problem mit DLL

Beitrag von af0815 »

Ich lade dynamisch eine in Delphi erstellte DLL und erhalte im StringBuffer einen Delphistring zurück der maximal StringBuffersize Bytes groß ist. Dieser String ist Null terminiert.

Code: Alles auswählen

function CopyPicDll(Buffer: Pointer; BufferSize: int64;
  StringBuffer: PWideChar; StringBufferSize: int64): ByteBool; stdcall;
begin
  if (@FCopyPicDll <> nil) and (BufferSize > 0) then
    Result := FCopyPicDll(Buffer, BufferSize, StringBuffer, StringBufferSize);
end;
 


Wie kann ich diesen Delphi-String (Ist UTF16/WideString kodiert) wieder zurückverwandeln ?

Wenn ich folgendes verwende (StrRes: PWideChar) dann kommt zwar ein Ergebnis heraus, aber Abfragen wie length() ergeben Schrott. Da dürfte die Länegangabe Schrott geworden sein.

Code: Alles auswählen

 
      CopyPicDll(PBuffer,FMyMemoryStream.Size,StrRes,100);
      Result := UTF16ToUTF8(PWideChar(StrRes),100);
 


Was habe ich da (alles) übersehen ?

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten