vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
DLL Aufruf funktioniert unter XP aber nicht unter Win7 / 64 
Autor: Peter S.
Datum: 17.08.16 11:00

Hallo,

ich habe hier ein Netzteil mit USB-Anschluss. Dazu gibt es einen Treiber und eine DLL.
Der Treiber funktioniert und das NT wird im Gerätemanager angezeigt (XP und Win7).
Der Aufruf von einem VB Programm funktioniert unter XP mit folgendem Code:

<DllImport("USB_Support.dll", EntryPoint:="USB_GetDeviceList", _
  CallingConvention:=CallingConvention.StdCall)>
    Public Shared Function USB_GetDeviceList(ByVal devList(,) As UInt16) As _
    UInt16
    End Function
Auf Win7 funktioniert weder die unter XP kompilierte .exe noch das Neukompilieren des Projektes.
Fehlermeldungen werden nicht ausgegeben, die Funktionsaufrufe haben einfach keinen Effekt.

Laut Hersteller gibt es keine Aktualisierung für Win7, aber wenn der Treiber funktioniert und das Gerät angezeigt wird, dann gibt es doch noch Hoffnung, oder?

Hat jemand eine Idee, was am Code (oder in den Projekteinstellungen) geändert werden muss, damit die DLL auch unter Win7 funktioniert?

Danke
Peter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL Aufruf funktioniert unter XP aber nicht unter Win7 / 64 
Autor: visualfx
Datum: 17.08.16 15:54

Hallo Peter,

ich würde als erstes mal überprüfen, ob Deine DLL unter Windows 7 überhaupt korrekt geladen werden kann.

Das kannst Du mit dem Dependency Walker erledigen: http://www.dependencywalker.com/depends22_x86.zip

Der Dependency Walker muß nicht installiert werden! Einfach die obige ZIP-Datei in einen eigenen Ordner herunterladen und entpacken.

Dann depends.exe starten und Deine DLL öffnen.

Gruß, Stefan

Beitrag wurde zuletzt am 17.08.16 um 15:57:49 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL Aufruf funktioniert unter XP aber nicht unter Win7 / 64 
Autor: visualfx
Datum: 17.08.16 16:03

noch ein kleiner Nachtrag:

außerdem spielt es noch eine entscheidende Rolle wo sich Deine DLL befindet!

1) in einem System-Ordner von Windows, hier gilt:

- wenn es sich bei Deiner DLL um eine echte 64 Bit-DLL handelt, muß sie sich im System32-Ordner befinden !!!

- wenn es sich bei Deiner DLL um eine 32 Bit-DLL handelt, muß sie sich im SysWOW64-Ordner befinden !!!

2) oder in einem Ordner außerhalb vom Windows-Ordner, z. B. im Ordner des eigenen Programms ist natürlich auch OK

Gruß, Stefan

Beitrag wurde zuletzt am 17.08.16 um 16:26:48 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Ursache gefunden ??? 
Autor: visualfx
Datum: 31.08.16 09:25

Hallo Peter,

- bist der Ursache für Dein Problem auf die Schliche gekommen ???

- poste doch mal den aktuellen Stand der Dinge, das interessiert sicher nicht nur mich, sondern auch andere Forums-Mitglieder

Gruß, Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL Aufruf funktioniert unter XP aber nicht unter Win7 / 64 
Autor: Peter S.
Datum: 01.09.16 16:41

Der Dependency Walker bringt mir den Fehler, dass folgende DLL fehlen:
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
DCOMP.DLL
GPSVC.DLL
IESHIMS.DLL
Laut Google ist das aber ein bekannter "Fehler", den der Dependency-Walker immer auf Systemen neuer als WinXP anzeigt.
Ich kann das auch mit anderen DLL aus dem Ordner System32 auf meinem Win 7/64 nachvollziehen.

Es bleibt also die Frage, liegt es
* am Treiber,
* an der DLL oder
* am Aufruf im Programm?
Leider(?) kommt keine Fehlermeldung die weiterhelfen könnte.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL Aufruf funktioniert unter XP aber nicht unter Win7 / 64 
Autor: visualfx
Datum: 01.09.16 18:11

Hallo,

- wichtig ist zunächst einmal nur, daß im Dependency-Walker alle DLLs [u]direkt unter Deiner DLL [u]ohne Fehler angezeigt werden

- daß z. B. die API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL angeblich nicht geladen werden kann, ist kein Fehler vom Dependency-Walker. Du kannst diese DLL ja mal auf Deinem PC suchen, Du wirst sie nicht finden . . .

- wie lautet eigentlich die exakte Schnittstellen-Definition vom Hersteller für die Funktion USB_GetDeviceList ???

- und noch folgende Frage: ist die DLL USB_Support.dll eine 32 Bit-DLL - und falls ja: liegt sie im SysWOW64-Ordner ???

Gruß, Stefan

Beitrag wurde zuletzt am 01.09.16 um 18:24:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL Aufruf funktioniert unter XP aber nicht unter Win7 / 64 
Autor: Peter S.
Datum: 02.09.16 08:25

Die Definition habe ich gerade nicht zur Hand, aber unter Win32 funktioniert das Programm ja so.
Laut Hersteller ist es eine 32 Bit DLL. Sie liegt im /bin/Debug Ordner, bei der .exe

Wenn ein altes Programm unter Win64 nicht mehr läuft, kann man doch den Kompatibilitätsmodus benutzen. Ginge nicht sowas? Evtl. gleich beim Kompilieren?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DLL Aufruf funktioniert unter XP aber nicht unter Win7 / 64 
Autor: visualfx
Datum: 02.09.16 09:01

1) Daß ein DLL-Aufruf unter WinXP funktioniert, ist noch lange kein Beweis.

Gerade bei der Deklaration von externen Funktionen hatte ich auch schon den Fall, daß es jahrelang bis WinXP wunderbar funktioniert hat - und dann ab WinVista / Win7 "plötzlich" und "ganz unerwartet" nicht mehr.

Wir bräuchten also schon die genaue (C-/C++-) Schnittstellen-Definition


2) Vom Kompatibilitätsmodus von Windows halte ich persönlich überhaupt nix !!!

Der Kompatibilitätsmodus versucht nur Programmierfehler zu vertuschen, wie z. B. ein normalerweise nicht zulässiges Schreiben in den Programme-Ordner oder in einen Windows-Ordner (Windows / System32 / SysWOW64 / etc.)

Selbst wenn Du unter Win7 einstellt: Windows XP SP3 wird aus Deinem Windows 7 noch lange kein Windows XP mit SP3 !!!

Was Microsoft beim Kompatibilitätsmodus überhaupt alles so intern treibt, wird auf immer sein Geheimniss bleiben . . .


3) Da diese DLL eine 32 Bit-DLL ist, mußt Du beim Compilieren natürlich auch eine 32 Bit-Exe erzeugen.

Gruß, Stefan

Beitrag wurde zuletzt am 02.09.16 um 09:05:30 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel