SetupDiGetClassDevs_() ist in der setupapi.dll ?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Holger
Beiträge: 53
Registriert: 25.02.2005 21:17

SetupDiGetClassDevs_() ist in der setupapi.dll ?

Beitrag 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)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten