Forum: PC-Programmierung BluetoothAuthenticateDevice unter Windows 10


von Tom (Gast)


Lesenswert?

Hallo,

benutzt hier jemand die API BluetoothAuthenticateDevice und hat Windows 
10?

Ich habe ein merkwürdiges Problem: Wenn die Anwendung im Vordergrund 
ist, funktioniert es prima. Wenn die Anwendung im Hintergrund ist, 
stürzt sie ab... Unter Windows 7 ist alles einwandfrei. Ich frage mich 
jetzt, ob das ein bekanntes Problem unter Windows 10 ist oder ob nur ich 
betroffen bin...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was bedeuten für Dich "Vordergrund" und "Hintergrund"? Aktives/inaktives 
Fenster oder anderes Benutzerkonto?

Und was sagt Dein Debugger, wenn die Anwendung abstürzt?

Sofern Du nur passiven Zugang zum Windows-10-Rechner hast, kannst Du Dir 
dort auch aus c:\programdata\microsoft\windows\wer einen Crashdump holen 
und den auf Deinem Entwicklungssystem in den Debugger laden.

Achja, womit ist Deine Anwendung geschrieben? (Sprache, Compiler)

von Jim M. (turboj)


Lesenswert?

Hmmm:
1
BluetoothAuthenticateDevice: 6 (0x6) Das Handle ist ungültig
2
BluetoothAuthenticateDevice: 6 (0x6) Das Handle ist ungültig

Schau Dir mal Deine Fehlerbehandlung an. Abschmiern tut hier (Windows 
10, Delphi XE6 Win32) nix.

von Tom (Gast)


Lesenswert?

Habe ein älteres Delphi, wobei die API innerhalb von try...except steht. 
Wenn das Fenster während des Aufrufs im Hintergrund ist, crasht die 
Anwendung. Was der Debugger sagt, gucke ich nachher mal. Bisher bin ich 
damit aber auf keinen grünen Zweig gekommen.

von Tom (Gast)


Lesenswert?

Die API scheint zu crashen, sobald das Gerät antwortet...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist eher unwahrscheinlich. Woher soll die API wissen, was Dein 
Fenster macht?

Zeige Deinen Code.

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal eingedampft zu einem Minimalbeispiel.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du könntest mal die Struktur "DI" ebenfalls sauber initialisieren, d.h. 
komplett auf 0 setzen, bevor Du die Größe einträgst. Mit der Struktur 
"DP" machst Du's ja auch.


Ansonsten steht in 
https://msdn.microsoft.com/de-de/library/windows/desktop/aa362770%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396, 
daß seit Vista SP2 statt BluetoothAuthenticateDevice besser 
BluetoothAuthenticateDeviceEx verwendet werden soll.

von Tom (Gast)


Lesenswert?

Auch mit "sauber" initialisiertem DI crasht es. Es passiert ja auch 
nicht sporadisch oder so, sondern zuverlässig immer, wenn das Fenster im 
Hintergrund ist. Wenn es im Vordergrund ist, funktioniert alles 
einwandfrei.
Das mit der Ex-Funktion glaube ich nicht. Unter Win 7 geht es ja auch. 
Sobald ich weiß, wie ich es unter Delphi implementieren muss, versuche 
ich es mal.

Hat es sonst schon einmal jemand probiert?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tom schrieb:
> Das mit der Ex-Funktion glaube ich nicht

Du glaubst nicht, daß Microsoft schreibt, daß man diese Funktion 
verwenden soll?

Nun, da steht im /Wortlaut/:

When developing for Windows Vista SP2 and Windows 7 the use of 
BluetoothAuthenticateDeviceEx is recommended.

wenn für Vista SP2 und Windows 7 entwickelt wird, wird der Gebrauch von 
BluetoothAuthenticateDeviceEx empfohlen.

Klar, das ist nicht die Ursache Deines Problemes. Ganz sicher nicht.


Wenn Dein Programm in Abhängigkeit von der Fensterpositionierung 
"crasht", Du aber für die Funktion BluetoothAuthenticateDevice gar 
kein Fensterhandle angibst, dann kann das "crashen" Deines Programmes 
auch nichts damit zu tun haben.

Oder hat Dein "eingedampftes Beispiel" mit Deinem Code dann doch eher 
weniger zu tun? "Crasht" denn Dein "eingedampftes Beispiel" auch?

von Tom (Gast)


Lesenswert?

Ja, tut es!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und, was sagt Dein Debugger dazu?

von Tom (Gast)


Lesenswert?

Delphi inkl. Debugger hängt. Vielleicht mache ich auch irgendwas falsch. 
:/ Deswegen die Hoffnung, dass es sich mal ein Profi anguckt.

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe das Projekt mal nach Lazarus / Free Pascal konvertiert und 
angehängt. Nach einem Klick auf den Button wird das Fenster automatisch 
in den Hintergrund geschickt, um das Problem zu provozieren. Dann 
startet der Suchvorgang. Es werden Bluetooth-Geräte gesucht und 
versucht, mit der Pin 1234 zu koppeln. Dabei (während des Koppelns) 
tritt der Crash auf, zumindest bei mir unter Windows 10.

Wer will, kann es ja auch mal versuchen. Ich wäre euch sehr verbunden, 
denn ich weiß echt nicht mehr weiter!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bietet Deine Programmierumgebung denn keinen Debugger?

von Tom (Gast)


Lesenswert?

Ich darf auf dem Win10-Rechner nichts ändern. Dort ist keine 
Programmierumgebung installiert.

von Draco (Gast)


Lesenswert?

Und einen anderern Rechner, mit Windows 10, hast du nicht zur 
Verfügung?! Ich finde es eher amüsant, das du ein Programm für Win10 
entwickelst aber kein Zugriff auf Win10 hast.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nun, wenn Dein Programm "crasht", dann kann Windows dazu gebracht 
werden, einen Speicherabzug und Stackdump zu erzeugen. Das kann man dann 
auf das Entwicklungssystem übertragen und dort in den Debugger laden.

von Christian R. (supachris)


Lesenswert?

Es wurden auch schon VMs erfunden, da drin kannste Win 10 plus Debugger 
installieren.

von Jim M. (turboj)


Lesenswert?

Tom schrieb:
> Ich habe das Projekt mal nach Lazarus / Free Pascal konvertiert und
> angehängt. Nach einem Klick auf den Button wird das Fenster automatisch
> in den Hintergrund geschickt, um das Problem zu provozieren. Dann
> startet der Suchvorgang. Es werden Bluetooth-Geräte gesucht und
> versucht, mit der Pin 1234 zu koppeln. Dabei (während des Koppelns)
> tritt der Crash auf, zumindest bei mir unter Windows 10.

Ich habe das in Delphi XE6 ausprobiert, kein Crash. Weder mit '1234' 
noch mit dem korrekten Pin.

Der Code lädt implizit "bthprops.cpl". Wenn das durch irgendwas 
herstellerspezifisches verschlimmbessert wurde, könnte der Fehler auch 
da liegen.

Ich könnte mir durchaus auch vorstellen das Dein Gerät beim Pairing 
irgendwas sendet was Windows durcheinander bringt.

von Tom (Gast)


Lesenswert?

Danke für's Testen! Anwendung im Hintergrund?

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.