Das ist recht einfach. Es wird ja nur ein Zeiger auf die Struktur benoetigt.
Da erlaubt Delphi es auch den Zeigertyp vor dem Record zu deklarieren. Es muss nur im gleichen type-Keyword-Bereich sein.
Da ist Delphi sogar eleganter als C wo extra der Hilfsname des structs (_MONITOR) eingefuehrt wurde um das zu handhaben.
Delphi-Quellcode:
type
LPMONITOR = ^MONITOR;
MONITOR = packed record
pfnEnumPorts: function(pName: PWideChar; dwLevel: DWORD; pPorts: PByte;
cbBuf: DWORD; var pdwNeeded, pdwReturned: DWORD): LongBool; stdcall;
pfnOpenPort: function (pName: PWideChar; var H: THandle): LongBool; stdcall;
pfnOpenPortEx: function (pName, pPrinterName: PWideChar; var H: THandle;
_Monitor: LPMONITOR): LongBool; stdcall;
end;
Ich wette auch mal darauf das die PHandle-Parameter var-Parameter sind (entsprechend korrigiert).
Es empfiehlt sich hier dringend Hilfstypen fuer die Funktionszeiger zu deklarieren.
Delphi-Quellcode:
type
LPMONITOR = ^MONITOR;
TMonitorEnumPortsFunc = function(pName: PWideChar; dwLevel: DWORD; pPorts: PByte;
cbBuf: DWORD; var pdwNeeded, pdwReturned: DWORD): LongBool; stdcall;
TMonitorOpenPortFunc = function (pName: PWideChar; var H: THandle): LongBool; stdcall;
TMonitorOpenPortExFunc = function (pName, pPrinterName: PWideChar; var H: THandle;
_Monitor: LPMONITOR): LongBool; stdcall;
MONITOR = packed record
pfnEnumPorts: TMonitorEnumPortsFunc;
pfnOpenPort: TMonitorOpenPortFunc;
pfnOpenPortEx: TMonitorOpenPortExFunc;
end;
Oops, da war ein Fehler.