Hallo Ich habe eine Programm geschrieben, für Win XP und WIN 7 mit Micrsoft Visual Studio C# 2005, die mit einem externen Microcontroller über die USB Schnittstelle Daten austauscht. Win XP und Win 7 sind 32 Bit Versionen und die Software funktioniert einwandfrei. Nun will ich sie auf einem 64 Bit Windows 7 laufen lassen und die USB Schnittstelle funktioniert nicht mehr. Das USB Gerät wird zwar, es ist ein HID Gerät, fehlerfrei von Windows erkannt, aber ich kann von der Software nicht mehr auf das Gerät zugreifen. Compilieren auf dem 64 BIT System, auch mit Visual Studieo 2010, hat nichts gebracht. Was ist so unterschiedlich zwischen 32 und 64 Bit das zwar die Software läuft, aber nicht die USB Schnittstelle? Wie kann ich das beheben? Danke Grüße Reiner
Du musst dein Programm dann wahrscheinlich gegen die x64 Version der HID-Lib linken.
Reiner schrieb: > Hallo > > Ich habe eine Programm geschrieben, für Win XP und WIN 7 mit Micrsoft > Visual Studio C# 2005, die mit einem externen Microcontroller über die > USB Schnittstelle Daten austauscht. > > Win XP und Win 7 sind 32 Bit Versionen und die Software funktioniert > einwandfrei. > > Nun will ich sie auf einem 64 Bit Windows 7 laufen lassen und die USB > Schnittstelle funktioniert nicht mehr. > Das USB Gerät wird zwar, es ist ein HID Gerät, fehlerfrei von Windows > erkannt, aber ich kann von der Software nicht mehr auf das Gerät > zugreifen. Welche Fehlermeldung(en)? Wie wird das USB-Gerät angesprochen, direkt hid.dll? Wie sind die Strukturen definiert? etc. > Compilieren auf dem 64 BIT System, auch mit Visual Studieo 2010, hat > nichts gebracht. Welches Target beim Übersetzen (any CPU, x86, x64)?
Moin Moin Was habe ich nun gemacht: Ich habe mir Visual Studio 2010 die Ultima Testversion installiert. Als Zielsystem x64 angegeben und compiliert. Keine Fehler. Gestartet, der Windowsteil, Fenster Buttons, funktioniert. Dann will ich Daten zum Gerät senden. Eine Meldung bekomme ich "Es wurde versucht, auf ein Token zuzugreifen, das nicht vorhanden ist." und es werden keine HID Geräte gefunden. Als DLL werden benutzt: HID.DLL kernel32.dll setupapi.dll user32.dll Die 32 -> ist das eine 32 Bit Version ? Aber z.B. ein kernel64 finde ich nicht. Grüße Reiner
Reiner schrieb: > Die 32 -> ist das eine 32 Bit Version ? Aber z.B. ein kernel64 finde > ich nicht. Das hängt davon ab, in welchem Verzeichnis sie sind. In einem unglaublichen Anfall von Genialität* hat Microsoft sehr weise entschieden, daß 64-Bit-Bestandteile des Betriebssystems im Verzeichnis \Windows\System32 landen, und daß 32-Bit-Bestandteile logischerweise unter \Windows\SysWOW64 unterzubringen sind.
>Das hängt davon ab, in welchem Verzeichnis sie sind. OK das heist also, die Dateien haben den selben Namen, werden nur in anderen Verzeichnissen gespeichet. Gut das sollte man wissen. Ist schließlich das erstemal wo ich einen 64 Rechner habe. Werden die dann auch richtig von einem Compiler benutzt? >In einem unglaublichen Anfall von Genialität* hat Microsoft sehr weise >entschieden, daß 64-Bit-Bestandteile des Betriebssystems im Verzeichnis >\Windows\System32 landen, und daß 32-Bit-Bestandteile logischerweise >unter \Windows\SysWOW64 unterzubringen sind. Ist das jetzt ernst gemeint, oder willst du mich ein wenig aufziehen? :)
Das Problem scheint doch wohl woanders zu sein. Ein 32bit programm läuft ohne Probleme auf Win7 64 weil er alles was er braucht als 32bit vorfindet. (für das Programm liegen unter system32 auch die 32bit dateien - das wird vom system auf SysWOW64 gemappt). Wenn das Programm nicht gerade ein systemtreiber laden will, dann gibt es eigentlich keinen Grund warum bei einem 64bit system etwas nicht gehen sollte. Wir wissen noch nicht mal mit welcher Spache das Pogramm geschrieben ist, oder wie der zugriff auf HID erfolgt. Das halte ich für wichtiger als die diskussion welche DLL verwendet werden. "Es wurde versucht, auf ein Token zuzugreifen, das nicht vorhanden ist." woher kommt diese meldung, bei welchern Aufruf? Ich vermute hier mehr ein Problem mit den Sicherheitsfunktionen von Win7, ein normales Programm hat z.b. keine Schreibrecht im Programmverzeichniss.
> Was ist so unterschiedlich zwischen 32 und 64 Bit das zwar die Software > läuft, aber nicht die USB Schnittstelle? Wie kann ich das beheben? "However, there are times when it’s not that simple. If your .NET assembly ne reference or interop with another managed assembly or unmanaged DLL that compiled with a specific architecture, then your assembly needs to match. Let’s look at an example. Suppose you have the following: . .NET assembly: Any CPU . 32-bit COM component On a 32-bit operating system, this scenario will work because the .NET assem be just-in-time compiled as 32 bits. However, on a 64-bit operating system, the .NET assembly will be 64 bits, an tries to call into the COM component, things will break. In this case, it would be better to specify that your assembly should always be Keep in mind that x64 operating systems run 32-bit processes just fine." Ich schätze mal daran liegt es. 64-bit Code trifft auf 32-bit COM Objekt. Compilier mal mit 32-bit (nicht any-CPU), dann sollte es auch auf 64-bit laufen.
> Wir wissen noch nicht mal mit welcher Spache das Pogramm geschrieben > ist, Wieso? Es hat doch Visual Studio C# 2005 genommen bzw. Testversion von VS 2010. Sprache ist also C#.
Olaf schrieb: > Wieso? Es hat doch Visual Studio C# 2005 genommen bzw. Testversion von > VS 2010. Sprache ist also C#. es gab hier schon genug Treads wo es nicht klar war. Vermuten und wissen sind immer noch 2 verschiende dinge.
> es gab hier schon genug Treads wo es nicht klar war. Vermuten und wissen > sind immer noch 2 verschiende dinge. Aber es steht doch weiter oben. Leseschwäche?
Reiner schrieb: > Ist das jetzt ernst gemeint, oder willst du mich ein wenig aufziehen? Das erscheint mir so unglaublich schwachsinnig, daß es einen Grund dafür geben muss - und das kann gar nichts anderes sein als von anderen unverstandenes Genie.
Olaf schrieb: > Ich schätze mal daran liegt es. 64-bit Code trifft auf 32-bit COM > Objekt. Compilier mal mit 32-bit (nicht any-CPU), dann sollte es auch > auf 64-bit laufen. Danke, das war das Problem :) @Peter II Nichts für ungut, aber vielleicht sollte man nicht gleich losbollern. Falls du es übersehen haben solltest, kannst du gerne noch einmal fragen, ich würde es dann gerne noch einmal beschreiben, und wenn ich meinen Text nur kopiere :). Danke und einen schönen Tag noch Reiner
Reiner schrieb: > Nichts für ungut, aber vielleicht sollte man nicht gleich losbollern. > Falls du es übersehen haben solltest, kannst du gerne noch einmal > fragen, ich würde es dann gerne noch einmal beschreiben, und wenn ich > meinen Text nur kopiere ich finde es immer nocht nicht. - wo steht in welcher sprache du Programmierst?
Peter II schrieb: > ich finde es immer nocht nicht. - wo steht in welcher sprache du > Programmierst? Im allerersten Beitrag des Threads steht: > Ich habe eine Programm geschrieben, für Win XP und WIN 7 mit Micrsoft > *Visual Studio C# 2005* Also ist klar, daß C# gemeint ist.
@ Reiner (Gast) War wohl ein Glückstreffer von mir, denn ich hab selber auch nur die 32-bit (express). ;-) Der zitierte Text stammt übrigens aus dem Buch C# 4.0, HOW-TO http://www.amazon.com/C-4-0-How-Ben-Watson/dp/0672330636 Auch interesant dazu http://msdn.microsoft.com/de-de/library/ms241064.aspx
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.