当前位置: 代码迷 >> Windows Mobile >> [急]怎么通过蓝牙发送一个文本文件?能解决,给多少分都行
  详细解决方案

[急]怎么通过蓝牙发送一个文本文件?能解决,给多少分都行

热度:57   发布时间:2016-04-25 07:47:51.0
[急]如何通过蓝牙发送一个文本文件?能解决,给多少分都行!
如何通过蓝牙发送一个文本文件?能解决,给多少分都行!
最好能调用系统的蓝牙模块。

------解决方案--------------------
是沙发吗?好像是!
你描述的不是很清楚,我大概说下。
使用蓝牙通讯可以直接调用winsock访问蓝牙的协议站,就是简单的WSAXXX,send,recv;
另外一种方式是通过蓝牙专用的虚拟串口驱动,用DeviceIoControl访问com驱动,
createfile,writefile,readfile

------解决方案--------------------
最简单的办法是当串口来处理
------解决方案--------------------
蓝牙连上 然后用socket啊 很简单的么 系统的蓝牙模块 好像也有相关的东东
你看看 btdrt这个模块什么的吧
------解决方案--------------------
socket需要一个客户端还需要一个服务器,增加工作量。可以用OBEX 

C/C++ code
HRESULT ObexHelper::SendFile(IObexDevice *pDevice, const WCHAR *pszPath, HWND hWnd){    HRESULT hr = S_OK;    //    // Opens the specified file.    //    FILE *pFile = _wfopen(pszPath, L"r");    if (pFile == NULL)    {        return E_FILE_NOT_FOUND;    }    //    // Extracts the file name(include extersion).    //    const WCHAR *pszName = wcsrchr(pszPath, L'\\');    pszName == 0 ? pszName = pszPath : pszName++;    IHeaderCollection *pConnectHeaders = 0;    hr = CoCreateInstance(__uuidof(HeaderCollection), NULL, CLSCTX_INPROC_SERVER, __uuidof(IHeaderCollection), (void**)&pConnectHeaders);    if (FAILED(hr))     {        return hr;    }    if (g_bAbort)    {        pConnectHeaders->Release();        return E_ABORT;    }        //if (dwFlags & DEV_SERVICE_FTP)    //hr = pConnectHeaders->AddTarget(sizeof(CLSID_FileExchange_NetOrder), (UCHAR*)&CLSID_FileExchange_NetOrder);        //    // Connects to the remote device.    //    SendMessage(hWnd, WM_OBEX_INFO, (WPARAM)pDevice, OBEX_INFO_CONNECT);    hr = pDevice->Connect(NULL, 0, pConnectHeaders);    if (FAILED(hr))     {        pConnectHeaders->Release();        SendMessage(hWnd, WM_OBEX_INFO, (WPARAM)pDevice, OBEX_INFO_FAIL);        return hr;    }    if (g_bAbort)    {        pDevice->Disconnect(pConnectHeaders);        pConnectHeaders->Release();        return E_ABORT;    }    //    // Transfer binary data.    //    SendMessage(hWnd, WM_OBEX_INFO, (WPARAM)pDevice, OBEX_INFO_TRANSFERDATA);    IHeaderCollection *pFileHeaders = NULL;    hr = CoCreateInstance(__uuidof(HeaderCollection), NULL, CLSCTX_INPROC_SERVER, __uuidof(IHeaderCollection), (void**)&pFileHeaders);    if (FAILED(hr))    {        pDevice->Disconnect(pConnectHeaders);        pConnectHeaders->Release();        SendMessage(hWnd, WM_OBEX_INFO, (WPARAM)pDevice, OBEX_INFO_FAIL);        return hr;    }    if (g_bAbort)    {        pFileHeaders->Release();        pDevice->Disconnect(pConnectHeaders);        pConnectHeaders->Release();        return E_ABORT;    }    hr = pFileHeaders->AddName(pszName);    if (FAILED(hr))    {        pFileHeaders->Release();        pDevice->Disconnect(pConnectHeaders);        pConnectHeaders->Release();        SendMessage(hWnd, WM_OBEX_INFO, (WPARAM)pDevice, OBEX_INFO_FAIL);        return hr;    }    if (g_bAbort)    {        pFileHeaders->Release();        pDevice->Disconnect(pConnectHeaders);        pConnectHeaders->Release();        return E_ABORT;    }    IStream *pStream = NULL;    hr = pDevice->Put(pFileHeaders, &pStream);    if (hr == S_OK)    {        //        // Calculates the size of the file.        //        fseek(pFile, 0, SEEK_END);        LONG iFileSize = ftell(pFile);        fseek(pFile, 0, SEEK_SET);        char *pszBuffer = new char[PM_LOG_BUFSIZE];        if (pszBuffer == NULL)        {            pStream->Release();            pFileHeaders->Release();            pDevice->Disconnect(pConnectHeaders);            pConnectHeaders->Release();            return E_OUTOFMEMORY;        }        while (iFileSize > 0)        {            size_t cbReaded = fread(pszBuffer, 1, PM_LOG_BUFSIZE, pFile);            if (cbReaded == 0)            {                break;            }                        DWORD dwBytesWritten;            hr = pStream->Write(pszBuffer, cbReaded, &dwBytesWritten);            if (FAILED(hr))            {                iFileSize -= cbReaded;                continue;            }            ASSERT(cbReaded == dwBytesWritten);            //DWORD dwBytesWrittenTotle = 0;            //char *pszTemp = pszBuffer;            //while (dwBytesWrittenTotle < cbReaded)            //{            //    hr = pStream->Write(pszTemp, cbReaded, &dwBytesWritten);            //    if (FAILED(hr))            //    {            //        break;            //    }            //    pszTemp += dwBytesWritten;            //    dwBytesWrittenTotle += dwBytesWritten;            //}            iFileSize -= cbReaded;        }        delete[] pszBuffer;        fclose(pFile);        pStream->Commit(STGC_DEFAULT);        pStream->Release();    }    pFileHeaders->Release();    pDevice->Disconnect(pConnectHeaders);    pConnectHeaders->Release();    return hr;}