Einzelnen Beitrag anzeigen

NetSonic

Registriert seit: 10. Mai 2007
124 Beiträge
 
Delphi 10 Seattle Professional
 
#11

Re: IOCTL von C nach Delphi portieren

  Alt 11. Mai 2007, 09:50
Das ganze sieht jetzt so aus, allerdings mosert der kompiler...

Delphi-Quellcode:
type
  PWDTPARAM = ^WDTPARAM;
  WDTPARAM = record
    timeout: Byte;
    data_b: Byte;
  end;

const
     WDT_TYPE = $88B9; //35001;

     WDT_DEVICE   = '\\.\WDT_DEVICE';
     WDT_DEVICE_NAME = '\Device\WDT_DEVICE';
     WDT_DOS_DEVICE_NAME = '\DosDevices\WDT_DEVICE';

     IOCTL_SYS_DIO_WRITE = (WDT_TYPE shl 16) or (2 shl 14) or ($805 shl 2) or 0;
     IOCTL_SYS_WDT_STOP = (WDT_TYPE shl 16) or (2 shl 14) or ($802 shl 2) or 0;
var
  hDIO: THandle;
  cParam: WDTPARAM;
  nReturn: DWORD;

procedure TForm1.Button1Click(Sender: TObject);
begin
     hDIO := CreateFile(WDT_DEVICE, GENERIC_READ OR GENERIC_WRITE, FILE_SHARE_READ OR
                    FILE_SHARE_WRITE, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL OR
                    FILE_FLAG_NO_BUFFERING, 0);
     cParam.data_b := IntToStr('$' + Edit1.Text);
     DeviceIoControl(hDIO, IOCTL_SYS_DIO_WRITE, @cParam, SizeOf(cParam), nil, 0, nReturn, NULL);
end;
Er sagt hier...
Zitat:
cParam.data_b := IntToStr('$' + Edit1.Text);
"Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann", was man vielleicht so lösen könnte:

cParam.data_b := StrToInt('$' + Edit1.Text); ????

und hier...
Zitat:
DeviceIoControl(hDIO, IOCTL_SYS_DIO_WRITE, @cParam, SizeOf(cParam), nil, 0, nReturn, NULL);
immer noch: "Konstantenausdruck verletzt untere Grenzen" sowie "Inkompatible Typen: 'Variant' und 'POverlapped'"

Wie ich vorhin auf so einen Quatsch gekommen bin, ist mir selber ein Rätsel... Vielleicht liegt es daran, dass mir dieser Bereich noch mehr als neu ist. Nur leider komme ich nicht darum herum. Vorher habe ich die notwendigen Hardware-Zugriffe per USB und dem Zugriff auf eine DLL gelöst, nur müssen wir jetzt leider diese auf dem Mainboard integrierten IO-Ports nutzen und dafür gibt es leider keine DLL oder ähnliches. Es geht alles nur über die Windows-API und die DeviceIOControl-Aufrufe... Leider!
  Mit Zitat antworten Zitat