2016-01-27 66 views
0

我想編寫一個程序,該程序每隔10ms通過藍牙低功耗接收數據。Windows上的藍牙低功耗堆棧溢出

我有很多工作要做,但我總是遇到一個問題,找不到源代碼。 這裏是我的代碼寫在C++ Builder中10在Windows 10

> //--------------------------------------------------------------------------- 

#include <vcl.h> 
#pragma hdrstop 

#include "Unit1.h" 
//--------------------------------------------------------------------------- 
#pragma package(smart_init) 

#define Characteristic_UUID "{6e400003-b5a3-f393-e0a9-e50e24dcca9e}" 
#define Service_UUID  "{6e400001-b5a3-f393-e0a9-e50e24dcca9e}" 
#pragma resource "*.dfm" 



TForm1 *Form1; 
TBluetoothLEDevice* device; 
TBluetoothGattCharacteristicList* characteristic ; 
//--------------------------------------------------------------------------- 
__fastcall TForm1::TForm1(TComponent* Owner) 
    : TForm(Owner) 
{ 
    BluetoothLE1->DiscoverDevices(100); 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::BluetoothLE1EndDiscoverDevices(TObject * const Sender, TBluetoothLEDeviceList * const ADeviceList) 

{ 
      device = ADeviceList->First(); 

    BluetoothLE1->DiscoverServices(device); 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::BluetoothLE1ServicesDiscovered(TObject * const Sender, TBluetoothGattServiceList * const AServiceList) 

{ 

      GUID AGuid; 
    CLSIDFromString(TEXT(Service_UUID), &AGuid); 
    TBluetoothGattService* service = BluetoothLE1->GetService(device,AGuid); 
    //TBluetoothGattServiceList* abcd = BluetoothLE1->GetServices(device); 


    CLSIDFromString(TEXT(Characteristic_UUID), &AGuid); 
    characteristic = BluetoothLE1->GetCharacteristics(service); 
    while(characteristic->First()->UUID != AGuid) 
    { 
      characteristic->Delete(0); 

    } 
    if(characteristic->First()!= NULL); 
     BluetoothLE1->SubscribeToCharacteristic(device,characteristic->First()); 
} 
//--------------------------------------------------------------------------- 
void __fastcall TForm1::BluetoothLE1CharacteristicRead(TObject * const Sender, TBluetoothGattCharacteristic * const ACharacteristic, 
      TBluetoothGattStatus AGattStatus) 

{ 
    static long i; 

    Label1->Caption = i; 
    i++; 
} 
//--------------------------------------------------------------------------- 

究竟86303分配時通知(呼叫BluetoothLE1CharacteristicRead)後的基礎上,我得到一個堆棧溢出。所以一定有什麼錯。 在開始時,我使用Windows Drivers Functions在C++中用Visual Studio編寫了程序,但是同樣的事情。

+0

寫入「堆棧溢出」以區別於StackOverflow。該網站是其他的東西:) – i486

+1

你檢查了實際的堆棧?這通常是堆棧溢出的原因。通常情況下,您有一個模式ABCABCABCABCAB,其中一些可能不是您的功能。一個常見的原因是從回調調用庫函數,以便庫再次調用您的回調... – MSalters

+0

好吧,我現在幾乎整個堆棧都充滿了這些12Bytes 0x014F3200 - > .O2。 0x005FFF64 - > .__d 0x00000000 - > .... 但我怎麼知道這是什麼。 – KingKarl237

回答

0

我發現了這個問題。 這是Win32藍牙API中的一個錯誤。 隨着Windows更新KB3156421每個程序在一次通知後崩潰,並且Mircosoft提供了一種解決方法。 Link

該解決方法也解決了上述問題。