Window 7 und USB

Gast #2282119
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
#2282153
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)?
Gast #2283014
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
Persönliche Seite #2283136
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.
Gast #2283226
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? :)
Gast #2283238
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.
Gast #2283259
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.
Gast #2283335
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren