Forum: PC-Programmierung Window 7 und USB


von Reiner (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

Du musst dein Programm dann wahrscheinlich gegen die x64 Version der 
HID-Lib linken.

von Arc N. (arc)


Lesenswert?

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)?

von Reiner (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Reiner (Gast)


Lesenswert?

>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? :)

von Peter II (Gast)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

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

von Olaf (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Reiner (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.