Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#22

AW: PChar, PAnsiChar, PWideChar, Integer, LPARAM, ... ?

  Alt 4. Nov 2017, 22:14
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
  Mit Zitat antworten Zitat