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
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.