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)どこか環境・コーディング他おかしいところがあるのでしょうか?
何卒ご教示願います。よろしくお願いします。