Versionen der iowkit.dll
Moderator: Guido Körber
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
Versionen der iowkit.dll
Meine mit VB.NET erstellte Software in Verbindung mit dem IO-Warrior56 funktioniert auf 32-Bit-Rechnern einwandfrei.
Wenn ich die Software auf 64-Bit-Rechnern starte, verursacht die folgende Routine die Meldung "No hardware found!"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IOhandle = IowKitOpenDevice()
If IOhandle = 0 Then
MessageBox.Show("No hardware found!")
Close()
End If
End Sub
Zwischenzeitlich habe ich erfahren, dass es eine 64-Bit-Version der iowkit.dll gibt. Daraufhin habe ich die dll ausgetauscht. Nun erzeugt die Routine Form1_load keine Fehlermeldung mehr. Aber die nachfolgende Routine
Private Sub BtnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnStart.Click
Dim lc As Integer
IOhandle = IowKitOpenDevice()
If IOhandle = 0 Then
MessageBox.Show("No hardware found!")
Close()
End If
For lc = 0 To 7
w56data(lc) = 0
Next lc
endflag = False
Call current_measurement()
End Sub
Führt zum Programmabsturz mit der Meldung {"Es wurde versucht, eine Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)"}
Das ist für mich nicht nachvollziehbar.
Wenn ich die Software auf 64-Bit-Rechnern starte, verursacht die folgende Routine die Meldung "No hardware found!"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IOhandle = IowKitOpenDevice()
If IOhandle = 0 Then
MessageBox.Show("No hardware found!")
Close()
End If
End Sub
Zwischenzeitlich habe ich erfahren, dass es eine 64-Bit-Version der iowkit.dll gibt. Daraufhin habe ich die dll ausgetauscht. Nun erzeugt die Routine Form1_load keine Fehlermeldung mehr. Aber die nachfolgende Routine
Private Sub BtnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnStart.Click
Dim lc As Integer
IOhandle = IowKitOpenDevice()
If IOhandle = 0 Then
MessageBox.Show("No hardware found!")
Close()
End If
For lc = 0 To 7
w56data(lc) = 0
Next lc
endflag = False
Call current_measurement()
End Sub
Führt zum Programmabsturz mit der Meldung {"Es wurde versucht, eine Datei mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)"}
Das ist für mich nicht nachvollziehbar.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Versionen der iowkit.dll
Wo liegt denn die dll auf dem 64bit Rechner?
Entweder die dll in den Ordner des Programms oder die 32bit dll im den Ordner syswow von Windows.
Die 64bit dll muss in den system32 Ordner.
Wenn die 64bit dll benutzt werden soll muss das Programm auch damit kompiliert werden.
Entweder die dll in den Ordner des Programms oder die 32bit dll im den Ordner syswow von Windows.
Die 64bit dll muss in den system32 Ordner.
Wenn die 64bit dll benutzt werden soll muss das Programm auch damit kompiliert werden.
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
Re: Versionen der iowkit.dll
Vielen Dank für die Hinweise.
Der Fehler tritt bereits im Interpretermodus auf.
Ich habe die 32-Bit-Version der iowkit.dll gelöscht und die 64-Bit-Version unter C:\windows\system32 abgelegt.
Das Ergebnis ist gleich.
Dann habe ich die 32-Bit-Version unter C:\Windows\syswow64 abgelegt.
Auch dies hat das Problem nicht gelöst.
Welche Bedeutung hat der Ordner syswow64? Wie ist genau der Zusammenhang? Kann man die 32-Bit-Version weiterverwenden, wenn die Datei iowkit.dll in den syswow64 Ordner abgelegt wird?
Der Fehler tritt bereits im Interpretermodus auf.
Ich habe die 32-Bit-Version der iowkit.dll gelöscht und die 64-Bit-Version unter C:\windows\system32 abgelegt.
Das Ergebnis ist gleich.
Dann habe ich die 32-Bit-Version unter C:\Windows\syswow64 abgelegt.
Auch dies hat das Problem nicht gelöst.
Welche Bedeutung hat der Ordner syswow64? Wie ist genau der Zusammenhang? Kann man die 32-Bit-Version weiterverwenden, wenn die Datei iowkit.dll in den syswow64 Ordner abgelegt wird?
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Versionen der iowkit.dll
Windows ist da eigen. Microsoft hat den syswow64 Ordner hinzugefügt um 32bit Komponenten unter 64bit nutzen zu können. Es war den junges da wohl zu umständlich den sys32 Ordner umzubennenen.
http://de.wikipedia.org/wiki/WOW64
Was Windows draus macht wenn man die dll in beiden Ordner zu haben habe ich nie versucht. Ab besten ist immer die dll im Verzeichnis der Anwendung zu halten. liegt die dll auch im Verzeichnis debug /release des projektordners? Daher kann auch der Fehler im kompiler her rühren. Und läuft evtl. eine andere Anwendung die auf den iowarrior zugreift dazu gehören auch mich beendete Prozesse die auf die dll zugreifen. Dann bekommt man nämlich keine Gerätehandles zurück.
http://de.wikipedia.org/wiki/WOW64
Was Windows draus macht wenn man die dll in beiden Ordner zu haben habe ich nie versucht. Ab besten ist immer die dll im Verzeichnis der Anwendung zu halten. liegt die dll auch im Verzeichnis debug /release des projektordners? Daher kann auch der Fehler im kompiler her rühren. Und läuft evtl. eine andere Anwendung die auf den iowarrior zugreift dazu gehören auch mich beendete Prozesse die auf die dll zugreifen. Dann bekommt man nämlich keine Gerätehandles zurück.
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
Re: Versionen der iowkit.dll
Anbei die Fehlermeldung, die unter folgender Situation auftritt:
Das Programm befindet sich auf einem 64-Bit-Rechner (mit Windows7 64 Bit). Geschrieben ist das Programm mit VB.NET 2010.
Im Ordner Windows/syswow64 befindet sich die 32-Bit-Version der Datei iowkit.dll.
Das Programm lässt sich starten - sowohl im Interpretermodus als auch als Kompilat (exe_Datei). Beim Start wird folgendes ausgeführt:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IOhandle = IowKitOpenDevice()
If IOhandle = 0 Then
MessageBox.Show("No hardware found!")
Close()
End If
End Sub
Sobald ich nun den Start-Button anklicke (bei dem nochmals geprüft wird ob ein Warrior56 angeschlossen ist) erscheint die Fehlermeldung (siehe Anhang).
Auf 32-Bit-Rechnern funktioniert das Programm aber einwandfrei.
Das Programm befindet sich auf einem 64-Bit-Rechner (mit Windows7 64 Bit). Geschrieben ist das Programm mit VB.NET 2010.
Im Ordner Windows/syswow64 befindet sich die 32-Bit-Version der Datei iowkit.dll.
Das Programm lässt sich starten - sowohl im Interpretermodus als auch als Kompilat (exe_Datei). Beim Start wird folgendes ausgeführt:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IOhandle = IowKitOpenDevice()
If IOhandle = 0 Then
MessageBox.Show("No hardware found!")
Close()
End If
End Sub
Sobald ich nun den Start-Button anklicke (bei dem nochmals geprüft wird ob ein Warrior56 angeschlossen ist) erscheint die Fehlermeldung (siehe Anhang).
Auf 32-Bit-Rechnern funktioniert das Programm aber einwandfrei.
- Attachments
-
- Fehlermeldung_1.jpg (57.37 KiB) Viewed 11843 times
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Versionen der iowkit.dll
Ich bin krankheitsbedingt nicht im Büro daher kann ich das nicht testen.
Liegt denn die iowkit.dll im Debug-/Release-Ordner des Projektes. Ich kenn diese fehlermeldung nämlich nur von C#, wenn die DLL nicht im Debug-/Release-Ordner beim Ausführen aus der Entwicklungsumgebung liegt.
Liegt denn die iowkit.dll im Debug-/Release-Ordner des Projektes. Ich kenn diese fehlermeldung nämlich nur von C#, wenn die DLL nicht im Debug-/Release-Ordner beim Ausführen aus der Entwicklungsumgebung liegt.
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
Re: Versionen der iowkit.dll
Egal wo die iowkit.dll (32-Bit-Version) liegt. Der Fehler kommt immer wie beschrieben.
Ich habe mittlerweile alles ausprobiert:
Nur in den Ordner Windows/syswow64
Nur in den Ordner /release/bin
Nur in den Ordner /debug/bin
Oder in allen drei Ordnern.
Ich kann mir nicht vorstellen, dass ich der einzigste bin der dieses Problem hat. Es gibt mehr und mehr 64-Bit-Rechner und die alten Programm sollen darauf laufen.
Es wäre schön, wenn es dazu eine Lösung gäbe.
Viele Grüße
Franz Peter
Ich habe mittlerweile alles ausprobiert:
Nur in den Ordner Windows/syswow64
Nur in den Ordner /release/bin
Nur in den Ordner /debug/bin
Oder in allen drei Ordnern.
Ich kann mir nicht vorstellen, dass ich der einzigste bin der dieses Problem hat. Es gibt mehr und mehr 64-Bit-Rechner und die alten Programm sollen darauf laufen.
Es wäre schön, wenn es dazu eine Lösung gäbe.
Viele Grüße
Franz Peter
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Versionen der iowkit.dll
Wurden auch die richtigen Datein eingebunden? Die 32bit und 64bit Dateiname ( H-files, lib und dll) unterscheiden sich. Bitte das komplette Projekt gepackt an jung@codemercs.com schicken. Ich schau mal drüber. Ich bin zur Zeit leider nicht im Büro und hab keine Hardware hier aber vielleicht sehr ich ja was.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Versionen der iowkit.dll
So ich habe auf meinem Rechner das ganze mal ausgeführt ohne vorher zu komilieren. Er sagt "Hardware Not Found" was ja richtig ist da ich hier im Moment keine Hardware habe (Halt die Messagebox aus dem Quellcode). Wenn ich die iowkit.dll aus dem Debug-Ordner entferne bekomme ich den auf dem Screenshot gezeigten Fehler.
Auf meinem Rechner ist sonst nirgends eine iowkit.dll abgelegt zwecks Tests und man weiß ja nie ob der jenige, der das Programm auch nutzen soll die DLL an den richtigen Ort kopiert.
Ich bin am Montag erst wieder im Büro aber ich würde alle iowkit.dll vom Rechner entfernen und mal nur eine iowkit.dll in den Debug-Ordner ablegen, bzw. in den Release-Ordner.
Auf meinem Rechner ist sonst nirgends eine iowkit.dll abgelegt zwecks Tests und man weiß ja nie ob der jenige, der das Programm auch nutzen soll die DLL an den richtigen Ort kopiert.
Ich bin am Montag erst wieder im Büro aber ich würde alle iowkit.dll vom Rechner entfernen und mal nur eine iowkit.dll in den Debug-Ordner ablegen, bzw. in den Release-Ordner.
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
Re: Versionen der iowkit.dll
Ich weiß nicht ob mein letztes Statement angekommen ist. Deshalb schreibe ich vorsichtshalber noch einmal.
Auch wenn die iowkit.dll nur einmal auf dem Rechner ist und unabhängig davon ob dies in \wowsys64, \release\bin oder \debug\bin - ich erhalte die Fehlermeldung.
Seltsam ist, dass die Fehlermeldung beim Starten des Programms nicht auftritt. Das gleiche Kommando, dass ich unter dem Start-Button verwende, bei dem dann der Fehler auftritt, verwende ich auch in der Sub Form_Load - wo der Fehler offensichtlich nicht auftritt.
Auch wenn die iowkit.dll nur einmal auf dem Rechner ist und unabhängig davon ob dies in \wowsys64, \release\bin oder \debug\bin - ich erhalte die Fehlermeldung.
Seltsam ist, dass die Fehlermeldung beim Starten des Programms nicht auftritt. Das gleiche Kommando, dass ich unter dem Start-Button verwende, bei dem dann der Fehler auftritt, verwende ich auch in der Sub Form_Load - wo der Fehler offensichtlich nicht auftritt.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Versionen der iowkit.dll
Ich habe es gerade noch einmal getestet.
Allerdings habe ich den Code angepasst und IowKitCloseDevice() eingeführt beim Beenden des Programms und beim Fehlschlagen beim Öffnen.
Auch habe ich bei erfolgreichem Öffnen noch IowKitSetTimeout() eingebaut, da ich die Hardware (SPI-Gerät) nicht habe und so der Lesevorgang abgebrochen wird und das Programm nicht hängen bleibt.
Keine Fehlermeldung, keine Debug-Fehler.
Allerdings habe ich den Code angepasst und IowKitCloseDevice() eingeführt beim Beenden des Programms und beim Fehlschlagen beim Öffnen.
Auch habe ich bei erfolgreichem Öffnen noch IowKitSetTimeout() eingebaut, da ich die Hardware (SPI-Gerät) nicht habe und so der Lesevorgang abgebrochen wird und das Programm nicht hängen bleibt.
Keine Fehlermeldung, keine Debug-Fehler.