Hallo und willkommen!
Die erste Zeile, die auskommentiert ist, ist korrekt:
Delphi-Quellcode:
if not OpenPrinter(PChar(DeviceName), hPrinter, nil) then
begin
Alternativ ginge es auch so:
Delphi-Quellcode:
if not OpenPrinter(@DeviceName[1], hPrinter, nil) then
begin
Hintergrund ist, dass DeviceName ein Pointer auf den String mit dem Druckernamen ist. Wenn du nun einen Pointer auf DeviceName nimmst, hast du die Adresse des Pointers auf den Druckernamen. Du musst aber die Adresse des Druckernamens übergeben. Deshalb kannst du den Pointer auf das erste Zeichen übergeben.
Es geht daher auch so:
Delphi-Quellcode:
if not OpenPrinter(Pointer(DeviceName), hPrinter, nil) then
begin
Am sinnvollsten ist aber die erste Variante mit dem Cast auf PChar, weil man dann direkt sieht was gemeint ist.