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...
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)
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.
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?
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?
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!
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.
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.
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.