Hallo..
Ich habe einen IO-Warrior 40 V1.0.2.1R
Ich benutze die IO-Warrior Dynamic Library V1.5 for Windows
Programmiersprache: C++ mit Borland Builder 5
Ich habe die iowkit.dll mit dem Borland-eigenen Tool „implib.exe“ angepasst.
Das soll passieren:
Ein Timer soll alle 10 Sekunden die Funktion IOW_Aktualisierung() aufrufen.
In dieser Funktion wird IowKitOpenDevice() aufgerufen.
Wenn der Rückgabewert ungleich NULL ist, werden mehrmals die Funktionen
IowKitWrite(..) und
IowKitRead ausgeführt
Danach wird mit IowKitCloseDevice(ioHandle) das Device wieder geschlossen und die Funktion beendet.
Folgendes passiert:
Beim ersten Aufruf der Funktion IOW_Aktualisierung() funktioniert alles einwandfrei.
Beim zweiten Aufruf der Funktion gibt IowKitOpenDevice() allerdings ein NULL zurück und die Funktion wird mit der Fehlermeldung beendet.
Was mache ich falsch?...
Über Tipps würde ich mich sehr freuen.
mfg
Camaris
void __fastcall TParkraum::TimerIOWTimer(TObject *Sender)
{
IOW_Aktualisierung(); //Aufruf der Funktion durch Timer alle 10 Sekunden
}
----------------------------------------------------------------------
void IOW_Aktualisierung() //Kurzfassung
{
IOWKIT_HANDLE ioHandle;
IOWKIT40_IO_REPORT Report;
ULONG Status;
ioHandle = IowKitOpenDevice();
if (ioHandle != NULL)
{
Report.ReportID = 0;
Report.Bytes[3] = 0xFF;
Report.Bytes[2] = 0x00;
Report.Bytes[1] = 0xFF;
Report.Bytes[0] = 0x00;
Status = IowKitWrite(ioHandle, IOW_PIPE_IO_PINS,
(PCHAR)&Report, IOWKIT40_IO_REPORT_SIZE);
Status = IowKitRead(ioHandle, IOW_PIPE_IO_PINS,
(PCHAR)&Report, IOWKIT40_IO_REPORT_SIZE);
IowKitCloseDevice(ioHandle);
}
else “Fehlermeldung”
}
Probleme beim mehrmaligen Aufruf von IowKitOpenDevice()
Moderator: Guido Körber
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Die aktuelle Version der 1.5 auf der Homepage sollte eigentlich funktionieren. Bitte pruefen und wenn es nicht funktioniert bescheid sagen. Ich debugge das dann und behebe das Problem.
Abgesehen davon ist es denn wirklich notwendig IowKitOpenDevice()/IowKitCloseDevice() jedesmal aufzurufen? Das waere nur noetig falls man erwartet das der IOWarrior oefters abgesteckt wird. Fuer diesen Fall sollte man aber auch eine genauere Pruefung implementieren. Es koennte ja ein ganz anderer IOWarrior angesteckt werden. Also testen ob es ein IOWarrior 40 ist und moeglichst auch noch die Seriennummer pruefen.
Abgesehen davon ist es denn wirklich notwendig IowKitOpenDevice()/IowKitCloseDevice() jedesmal aufzurufen? Das waere nur noetig falls man erwartet das der IOWarrior oefters abgesteckt wird. Fuer diesen Fall sollte man aber auch eine genauere Pruefung implementieren. Es koennte ja ein ganz anderer IOWarrior angesteckt werden. Also testen ob es ein IOWarrior 40 ist und moeglichst auch noch die Seriennummer pruefen.