Forum: PC-Programmierung Windows 10 C API


von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Angehängte Dateien:

Lesenswert?

Hallo,
ich brauche mal einen Tipp von euch. Ich habe eine kleine Applikation, 
die ein relativ überschaubaren Satz an Plattform spezifischen Funktionen 
(für Bluetooth LE) benötigt. Ich habe die als C-Interface abstrahiert, 
bereits für OS/X implementiert und nutze dass in einer reinen C++ 
Applikation.

Nun möchte ich das Ganze nach Windows 10 (ggf. auch Windows 8.1) 
portieren und suche gerade nach einem passenden Einstieg. Die Bluetooth 
(LE) Funktionen finde ich (z.B: 
https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.advertisement.bluetoothleadvertisementwatcher) 
für C++/CX.

Jetzt weis ich nicht, wie gut sich dieses C++/CX mit "richtigem" C++ 
mixen läßt. Wenn ich das richtig überblicke, dann hätte ich noch die 
Möglichkeit, über WRL direkt in C++ gegen die Windows API zu 
programmieren.

Gibt es auch noch andere Möglichkeiten? Ist es nicht mehr möglich, in C 
die Windows API zu verwenden?

mfg Torsten

P.S.: Anbei die Deklarationen, der zu implementierenden Funktionen:

von Felix U. (ubfx)


Lesenswert?

Torsten R. schrieb:
> Gibt es auch noch andere Möglichkeiten? Ist es nicht mehr möglich, in C
> die Windows API zu verwenden?

Selbstverständlich ist das möglich. Was du verlinkt hast ist aber nicht 
teil "der" Windows-API sondern Teil von dem Windows UWP Kram, was im 
Prinzip .NET Runtime ist.

Ganz normal mit C ohne Runtime kannst du die hier benutzen:
https://msdn.microsoft.com/en-us/library/windows/hardware/hh450825(v=vs.85).aspx

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Hallo Felix,

Felix U. schrieb:
> Selbstverständlich ist das möglich. Was du verlinkt hast ist aber nicht
> teil "der" Windows-API sondern Teil von dem Windows UWP Kram, was im
> Prinzip .NET Runtime ist.

irgendwie verstehe ich die ganze Struktur der Windows API nicht. Wenn 
ich auf den Seiten von Microsoft nach einer Lösung suche, dann finde ich 
z.B. für das Lauschen auf BLE Advertisments nur eine API, die aus diesem 
UWP-Kram-Universum kommt. In dem C-API-Universum gibt es zwar das von 
Dir zitierte Set an BLE Funktionen, aber nichts, um auf Advertisments zu 
lauschen. Ich bin sogar extra noch mal die header durch gegangen, weil 
Microsoft diese (Basis-) Funktionalität erst in einer recht späten 
Version von Windows 10 eingebaut hat.

Ich finde zwar unter C:\Program Files (x86)\Windows 
Kits\10\Include\10.0.15063.0\winrt einen header 
windows.devices.bluetooth.advertisement.h, der dem Namen nach das 
enthalten müsste, was ich suche. Der Inhalt scheint auch C++ zu sein, 
aber der enthält offensichtlich generierten Code, der nicht für's 
menschliche Auge gedacht ist.

Kann es sein, dass an der Stelle, die UWP Lösung an der C API etwas 
implementiert, was in der C API nicht enthalten ist?

mfg Torsten

: Bearbeitet durch User
von Felix U. (ubfx)


Lesenswert?

Torsten R. schrieb:
> Kann es sein, dass an der Stelle, die UWP Lösung an der C API entwas
> implementiert, was in der C API nicht enthalten ist?

Das ist gut möglich. Zu Bluetooth speziell kann ich nichts sagen, weil 
ich damit noch nicht gearbeitet habe. Bei USB ist es allerdings so: Die 
native WDK (Windows Driver Kit, Teil "der" Winapi) API beinhaltet 
WinUSB, was sehr rudimentäre Funktionen zur Kommunikation mit dem USB 
Stack bereitstellt. Damit kann man im Prinzip auch alles machen, aber es 
kann bisweilen sehr viel umständlicher werden.

UWP hat aber zum Beispiel auch nochmal eine eigene UsbDevice Klasse, die 
wohl wesentlich komfortabler ist und dann auf der jeweiligen Plattform 
die darunterliegende Abstraktionsschicht kapselt (auf Windows Desktop 
ist das dann WinUSB).

Ich bin mir relativ sicher, dass man das, was du machen willst, mit den 
WinAPI Funktionen bewerkstelligen kann, guck dir vllt auch mal diese 
Liste hier an, auch wenn die nicht speziell für Low Energy ist (weiß 
nicht ob das relevant ist):
https://msdn.microsoft.com/en-us/library/aa362778(v=vs.85).aspx

: Bearbeitet durch User
von guest (Gast)


Lesenswert?

Torsten R. schrieb:
> Der Inhalt scheint auch C++ zu sein, ...
Das dürfte eher ManagedC++/CLI oder wie immer diese MS-Perversion gerade 
heißt sein. Will man sich eigentlich nicht wirklich antun, dann lieber 
C#.

Torsten R. schrieb:
> Kann es sein, dass an der Stelle, die UWP Lösung an der C API etwas
> implementiert, was in der C API nicht enthalten ist?

Kann man so nicht sagen. Die UWP/.NET Apis liegen halt auf einem höheren 
Abstraktionsebene, können am Ende aber auch nur auf die C Api zurück 
greifen.

Zu den von Felix schon genannten Funktionen braucht man dann vermutlich 
auch noch einige der SetupDi*, z.B.:
https://msdn.microsoft.com/library/windows/hardware/ff551069.aspx

Hier findet sich dann auch noch etwas Beispielcode:
https://social.msdn.microsoft.com/Forums/en-US/bad452cb-4fc2-4a86-9b60-070b43577cc9/is-there-a-simple-example-desktop-programming-c-for-bluetooth-low-energy-devices?forum=wdk

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Ich hatte mal eine ähnliche Frage in einem MS Forum gefragt 
(https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/ea64d529-6302-435b-963a-3901aca77ec3/scanning-for-bluetooth-le-devices?forum=wdk).

Die Antwort eines MS-Kollen war:
1
Our richest set of functionality is in the UWP under Windows.Devices.Bluetooth. As you've observed the newest functionality like scanning for advertisements and implementing a GATT server is only implemented in UWP, there are no flat C interfaces.


Puh, sieht so aus, als müsste ich (nach ObjectC unter OS/X) jetzt auch 
noch mit C++/CX "lernen" :-(

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.