Seite 1 von 1

SetupDiGetClassDevs_() ist in der setupapi.dll ?

Verfasst: 29.09.2005 21:57
von Holger
Ich komme beim Versuch, Daten mit HID's auszutauschen nicht weiter.
Das Problem liegt darin, daß folgender Code die o.g. Funktion nicht findet,
obwohl die setupapi.dll vorhanden und geöffnet wurde:

Code: Alles auswählen

OpenLibrary(0,"hid.dll")
OpenLibrary(1,"setupapi.dll")
Debug IsFunction(0,"HidD_GetHidGuid")
Debug IsFunction(1,"SetupDiGetClassDevs")
*HidGuid=AllocateMemory(16)   ;128bit HID Guid
CallFunction(0,"HidD_GetHidGuid",*HidGuid)
Debug DeviceInfoSet=CallFunction(1,"SetupDiGetClassDevs",*HidGuid,"",0,$2 Or $10)

;VB Code:

;Public Const DIGCV_PRESENT = &H2
;Public Const DIGCV_DEVICEINTERFACE = &H10
;DeviceInfoSet = SetupDiGetClassDevs _
;    (HidGuid, _
;    vbNullString, _
;    0, _
;    (DIGCF_PRESENT Or DIGCF_DEVICEINTERFACE)) 
End
Der HidGuid wird übrigens einwandfrei ermittelt.

Die Funktionsbeschreibung findet man auf:
http://msdn.microsoft.com/library/defau ... 5c.xml.asp

Die zweite Sache, mit der ich nicht zurechtkomme, ist der VB Parameter "vbNullString". Wie übergibt man ihn in Purebasic ?
Kann ich die Parameter $2 und $10 so einer Callfunction() übergeben ?

/// Edit:

Folgender Code scheint zu funktionieren:

Code: Alles auswählen

OpenLibrary(0,"hid.dll")
OpenLibrary(1,"setupapi.dll")
Debug IsFunction(0,"HidD_GetHidGuid")
Debug IsFunction(1,"SetupDiGetClassDevsA")
*HidGuid=AllocateMemory(16)   ;128bit HID Guid
CallFunction(0,"HidD_GetHidGuid",*HidGuid)
Debug *DeviceInfoSet=CallFunction(1,"SetupDiGetClassDevsA",*HidGuid,0,0,$2|$10)
End
Die Funktion "SetupDiGetClassDevs()" muss als Alias "SetupDiGetClassDevsA" aufgerufen und vbNullString ist eine einfache 0.
Ich weiß zwar nicht genau, was ein Alias in VB ist, aber jedenfalls bekomme ich einen Zeiger.
Bei

Code: Alles auswählen

*DeviceInfoSet=CallFunction(1,"SetupDiGetClassDevsA",*HidGuid,"",0,$2|$10)
;oder
*DeviceInfoSet=CallFunction(1,"SetupDiGetClassDevsA",*HidGuid,0,0,$2 Or $10)
ist der Rückgabewert -1.

Vielen Dank für die Antwort(en)

Verfasst: 29.09.2005 23:59
von ts-soft
>> Ich weiß zwar nicht genau, was ein Alias in VB ist, aber jedenfalls bekomme ich einen Zeiger
Das ist der original Funktionsname in der DLL. Der andere Name ist der, den Du in Deinem VB-Programm verwendest, nachdem die Funktion declariert wurde.
In diesem Fall sieht es so aus, als ob es eine Ansi und eine Unicode Version der Funktion gibt.