none
PCによるBluetooth通信2 RRS feed

  • 質問

  • PC間にて、Bluetoothによるデータ転送を行いたくて開発作業をすすめています。
    手動にて設定、ファイル送受信確認済みのテスト環境があり、その機器に対して作業をおこなっています。
    Bluetoothによる作業自体が初めてで各HPのコードを参考にさせていただいています。

    ところが開発したアプリケーションを実行してもXPのPCではBluetoothFindFirstDeviceにより情報を取得できません。
    テスト環境ではPC側がBluetooth 無線アダプタ(BT-Micro3E2X)をUSB接続にて使用・ドライバは添付CDによりインストール、
    相手側PCではSTYLISTIC Q550/CでBluetooth標準のドライバを使用しています。

    XPのPCでもう1つテスト環境がありそちらは内臓タイプです。

    Windows7のPCにて同じ処理を実行しても良好な結果を得られます。
    2台のPCともGetLastError()にてエラー情報を取得すると1台は「ハンドルが無効です」の結果が得られます。(アダプタが外付けUSB接続の環境、コントールパネルのサービス内に「Bluetooth Support Service」あり、サービスのRemote Procedure Callは開始している状態)

    1台は「RPCサーバーを利用できません」の結果が得られます。(アダプタが内臓の環境、コントールパネルのサービス内に「Bluetooth Support Service」なし、コントールパネルのサービス内のBluetooth関連サービスは「Bluetooth Service」のみ、サービスのRemote Procedure Callは開始している状態)

    OS:WindowsXP SP3、Windows7 Pro(SP1)
    開発環境:Visual C++ 2010 Express、ソリューション:Win32プロジェクトにて作成

    // Bthpropsはプロジェクトに直接追加
    // コードの内容

    #include <stdio.h>
    #include <windows.h>
    #include "Bthsdpdef.h"
    #include "BluetoothAPIs.h"

    BLUETOOTH_DEVICE_SEARCH_PARAMS SearchParam;
    memset( &SearchParam, 0, sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS) );
    SearchParam.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
    SearchParam.fReturnAuthenticated = TRUE;
    SearchParam.fReturnRemembered = TRUE;
    SearchParam.fReturnConnected = TRUE;
    SearchParam.fReturnUnknown = TRUE;
    SearchParam.fIssueInquiry = FALSE;
    SearchParam.cTimeoutMultiplier = 10;
    SearchParam.hRadio = NULL;

    HBLUETOOTH_DEVICE_FIND hfind = NULL;
    BLUETOOTH_DEVICE_INFO Devinfo;
    memset( &Devinfo, 0, sizeof(BLUETOOTH_DEVICE_INFO) );
    Devinfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
    if( hfind= BluetoothFindFirstDevice( &SearchParam, &Devinfo ) ){
     // 作業

    }

    LPVOID lpMsgBuf;

    // 見つからない場合
    if (hfind==NULL)
    {
     FormatMessage(    //エラー表示文字列作成
       FORMAT_MESSAGE_ALLOCATE_BUFFER |
       FORMAT_MESSAGE_FROM_SYSTEM |
       FORMAT_MESSAGE_IGNORE_INSERTS,
       NULL, GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf, 0, NULL);

     std::ofstream wcout( "c:\\temp\\xxx.txt" );

     //変換
     err = wcstombs_s(&wLen, wStrC, 50, (LPTSTR) lpMsgBuf, _TRUNCATE);

     wcout << std::string(wStrC) <<  << std::endl;
    }

    LocalFree(lpMsgBuf);


    質問1)GetLastError()の記述位置に問題があるのでしょうか?
    質問2)どこか環境・コーディング他おかしいところがあるのでしょうか?

    何卒ご教示願います。よろしくお願いします。



    • 編集済み dmisa64 2012年6月19日 9:07
    2012年6月15日 10:57