![]() |
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Nur woher soll ich dann den richtigen Typen kennen, wenn die IDE mir schon PWideChar anzeigt?
Beispiele
Delphi-Quellcode:
// #1
var pName: PWideChar; begin pName := PWideChar('Test'); CopyData.dwData := 0; CopyData.cbData := (StrLen(pName) + 1) * SizeOf(WideChar); CopyData.lpData := pName; SendMessage(hExistingInstance, WM_COPYDATA, 0, LPARAM(@CopyData)); end; // #2 ... := FindWindow(PWideChar('Test')); // #3 ... := GetFileAttributes(PWideChar('Test')); |
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Zitat:
Zitat:
Grüße Dalai |
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Zitat:
|
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Wobei "meckern" in dem Zusammenhang nicht nur bedeuten kann, dass der Code nicht kompiliert, sondern auch, dass der Compiler Warnungen bzgl. impliziter Stringumwandlung ausgibt. Also immer schön auf die Meldungen des Compilers achten, und versuchen, Warnungen zu verstehen und zu beheben.
Grüße Dalai |
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Zitat:
|
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Hmm...
Zitat:
(Auszug D6)
Delphi-Quellcode:
Somit kannst Du unter jedem Delphi
function FindWindow; external user32 name 'FindWindowA';
function FindWindowA; external user32 name 'FindWindowA'; function FindWindowW; external user32 name 'FindWindowW'; FindWindowA mit PAnsiChar FindWindowW mit PWideChar verwenden! Kein Alias, keine Verwechslung und der Compiler meckert nur noch zurecht! Unter D6 verwende ich impliziert die 'W'-Funktionen mit PWideChar und meine Funktionen geben WideString als Result, diese kann ich nun als WideString weiterverwenden (z.B. TNT-Controls) und bin damit auch bedingt UNICode tauglich und dass mit D6! ;) |
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Zitat:
Zitat:
Eine echt dumme Frage nur noch. Wenn ich den Alias verwende, verwendet Delphi dann in der heutigen Zeit ausnahmslos immer bei Übergabe von string die W-Variante? |
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Zitat:
Wie bereits gesagt, am Einfachsten immer String/PChar verwenden, da Delphi seine Deklarationen auch so schreibt. Außer man weiß schon genau, dass hier feste Typen verwendet werden müssen. Es gibt einige APIs, die es nur in einer Version (ANSI/Unicode) gibt. Und auch Daten nach Extern (z.B. in Datei oder Stream zu einem anderen Programm) sollten besser immer statisch sein. (so lange nicht irgendwo das Format mit übergeben wird) Wenn das eine Programm als ANSI compiliert wurde und das Andere als Unicode, würde es sonst Probleme geben. Das gilt auch für die Übergabe zwischen EXE und DLL. Nur bei 32 und 64 Bit gibt es mit EXE und DLL keine Probleme, da Beide gleich sein müssen. (abgesehn von einem OutOfProcess-Server bei COM-DLLs) Alias werden "leider" nicht angezeigt. Das wäre mal ein gutes Feature, aber nach dem Compilieren ist nur der "Ursprungstyp" und nicht der Alias bekannt, da der Alias beim Compilieren durch diesen Typen ersetzt wird. |
AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?
Mein Kopf raucht und ich verstehe nichts. Ich bleibe einfach bei den Alias-Aufrufen mit PChar, Ende.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz