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!