Nur woher soll ich dann den richtigen Typen kennen, wenn die
IDE mir schon PWideChar anzeigt?
Ich sehe es so: Einfach immer PChar und String benutzen, bis der Compiler meckert. Manchmal weiß man es sogar vorher, dass (
API-)Funktionen einen konkreten Typen wie PWideChar oder WideString erwarten, weil man eine Funktion bereits in der Vergangenheit benutzt hat.
Zitat:
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'));
GetFileAttributes und FindWindow sind beides Aliase (für FindWindowA/W bzw. GetFileAttributesA/W). Daher sollte hier besser jeweils PChar benutzt werden. Bzgl. des SendMessage kommt es darauf an, was der Empfänger der Nachricht erwartet - das kann man nicht pauschal sagen. Anders ausgedrückt: erwartet der Empfänger einen Zeiger auf einen
Ansi-String, ist die Verwendung von PWideChar mit Sicherheit falsch.
Grüße
Dalai