Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   String aus Pointer ermitteln? (https://www.delphipraxis.net/203527-string-aus-pointer-ermitteln.html)

skoschke 26. Feb 2020 12:46

String aus Pointer ermitteln?
 
Hallo,

aus einer DLL-Anfrage erhalte ich folgende Recordstruktur zurück:
Delphi-Quellcode:
TDLLRec = record
    Nr       : String[3];
    BlobSize : Integer;
    PBlob    : Pointer;
end;
In PBlob soll ein RTF-Text stehen, wie bekomme ich den aus dem Record?

Danke
Ciao
Stefan

Uwe Raabe 26. Feb 2020 13:00

AW: String aus Pointer ermitteln?
 
Kommt drauf an, ob der Text in Ansi, UTF-8 oder Unicode (oder sonstwas) codiert ist. Einfach mal schauen was bei
Delphi-Quellcode:
PAnsiChar(PBlob)
,
Delphi-Quellcode:
PUTF8Char(PBlob)
und
Delphi-Quellcode:
PChar(PBlob)
rauskommt.

himitsu 26. Feb 2020 13:53

AW: String aus Pointer ermitteln?
 
Wenn es ein String ist und der Record+DLL von dir stammen, dann statt Pointer ein WideString verwenden.
WideString ist der BSTR von Windows (MSDN-Library durchsuchenSysAllocStringLen) und kann ohne ShareMem zwischen getrennten Modulen (EXE/DLL) übergeben werden.

Ansonsten mußt du halt casten (siehe Uwe), oder umkopieren, z.B. Delphi-Referenz durchsuchenSetString mit PBlob und BlobSize in einen AnsiString, UTF8String oder UnicodeString.

PChar und String wolltest du hier gleich vergessen, denn modulübergreifend sollte man immer nur mit statischen/festen Typen arbeiten.
String, Char und PChar sind tabu. (also AnsiString, UnicodeString, WideString, PAnsiChar, PWideChar, ...)
Integer/NativeInt könnte man auch mit auf die Liste setzen und dafür LongInt verwenden, aber da eine 32 Bit-DLL nicht in einem 64 Bit Programm läuft, wäre es fast egal, aber wenn es z.B. um Prozessübergreifende Datenübertragung/-speicherung geht, dann das auch nicht.

skoschke 26. Feb 2020 14:03

AW: String aus Pointer ermitteln?
 
Danke, das hatte ich auch schon, aber der Inhalt des Blob war kaputt, da konnte ich lange suchen...

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz