Einzelnen Beitrag anzeigen

Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: C-Header konvertierung: Struct verweist auf sich selbst?

  Alt 5. Feb 2007, 20:07
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.
  Mit Zitat antworten Zitat