Versionen der iowkit.dll

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Versionen der iowkit.dll

Post by Franz Peter Zantis »

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.
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Versionen der iowkit.dll

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: Versionen der iowkit.dll

Post by Franz Peter Zantis »

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?
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Versionen der iowkit.dll

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: Versionen der iowkit.dll

Post by Franz Peter Zantis »

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.
Attachments
Fehlermeldung_1.jpg
Fehlermeldung_1.jpg (57.37 KiB) Viewed 11820 times
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Versionen der iowkit.dll

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: Versionen der iowkit.dll

Post by Franz Peter Zantis »

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
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Versionen der iowkit.dll

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Versionen der iowkit.dll

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: Versionen der iowkit.dll

Post by Franz Peter Zantis »

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.
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Versionen der iowkit.dll

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply