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:
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.