Wywouję funkcję GetPrinter w następujący sposób:
var
aDevMode: PDeviceMode;
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
aDevMode := GlobalLock(hDeviceMode);
end;
Wszystko fajnie działa. Pojawia się jedynie problem, gdy muszę zrobić w drugą stronę - tzn. mam już aDevMode, a muszę użyć SetPrinter:
var
aDevMode: PDeviceMode;
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDeviceMode: THandle;
begin
...
hDevMode := THandle(aDevMode);
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
end;
Już nie działa... GetPrinter powoduje AccessViolation...
Co gorsza, czasem zadziała, ale przy zamykaniu aplikacji pojawia mi się okno CPU z komunikatem: Invalid Address specified to RtlFreeHeap