Forum: Programmieren allgemein
Delphi
by himitsu,
28. Mär 2024
Wie schon erwähnt, brauchst du für WideString und OleVariant (nicht Variant) kein ShareMem/SimpleShareMem, da hierfür bereits eine externe Speicherverwaltung genutzt wird.
@Rolf: Für externe Schnittstellen, wie z.B. DLLs, am Besten niemals dynamische Typen verwenden, also kein Char, PChar oder String, sondern nur statische Typen, wie z.B. PWideChar/PAnsiChar oder WideString.
Rate mal,...
Forum: Programmieren allgemein
Delphi
by himitsu,
28. Mär 2024
dynamisches Array:
@Antwort ist ein Zeiger auf die Variable, nicht auf die Daten.
@Antwort ist ein Zeiger auf das erste Char, bzw. auf alle Chars im Array.
Wie gesagt, mach doch einfach procedure GetTxt(var A: WideString; L: Integer); cdecl; und lass das ganze Rumgepointere sein.
procedure GetTxt(var A: WideString; L: Integer); cdecl;
var
i :Integer;
Forum: Programmieren allgemein
Delphi
by himitsu,
28. Mär 2024
nochmal
ShortString: an Adresse 0 steht das LängenByte (ist intern ein Array of AnsiChar),
und deswegen fangen auch neueren LongStrings (AnsiString und UnicodeString) seit 20 Jahren mit 1 an zu zählen.
Mit schreibst zu in AdressOffest -1, also mitten in die Verwaltungsdaten, wo zufällig der Längen-Integer sich versteckt.
Forum: Programmieren allgemein
Delphi
by himitsu,
28. Mär 2024
Ich wüsste nicht, warum SetString eine Begrenzung haben sollte. :gruebel:
System._UStrFromPWCharLen für String/UnicodeString
System._WStrFromPWCharLen für WideString
Arg, wer hat sich denn diesen totalen Schwachsinn ausgedacht?
Für WideString ist SetString komplett im A***
Echt mal, das einfach blind nach UnicodeString zu casten, ist grob fahrlässig ... hatte wohl auch wer...