1
#include <Bthsdpdef.h>
#include <BluetoothAPIs.h>
#include <Winsock2.h>
#include <Ws2bth.h>
#include <stdio.h>

#pragma comment(lib, "Bthprops.lib")


int main(void){
    WSADATA wsaData;
    int err;
    DWORD qs_len;
    WSAQUERYSET *qs;
    DWORD flags;
    HANDLE lphLookup;
    int iRet;
    char buff[4096];
    LPWSAQUERYSET pwsaResult = (LPWSAQUERYSET) buff;
    DWORD buffLen = sizeof(buff);
    BTH_ADDR result;

    WORD wVersionRquested = MAKEWORD(2,2);
    err = WSAStartup(wVersionRquested, &wsaData);   //Statrup function

    if(err != 0){
        printf("WSAStartup failed");
        return 1;
    }

    qs_len = sizeof(WSAQUERYSET);
    qs = (WSAQUERYSET *) malloc(qs_len); // Save memory for  WSAQUERYSET structere
    ZeroMemory(qs, qs_len); //zero WSAQUERYSET out

    qs->dwSize = sizeof(WSAQUERYSET);
    qs->dwNameSpace = NS_BTH;
    qs->lpcsaBuffer = NULL;
    flags = LUP_CONTAINERS | LUP_FLUSHCACHE | LUP_RETURN_NAME | LUP_RETURN_ADDR; //details of the device discovery

    iRet = WSALookupServiceBegin(qs, flags, &lphLookup);
    if(iRet == ERROR_SUCCESS){
        printf("WSALookupServiceBegin failed");
        return 1;
    }
    printf("\r\n\t\t\t\tScanning...");

    ZeroMemory(pwsaResult, sizeof(LPWSAQUERYSET));
    pwsaResult->dwSize = sizeof(WSAQUERYSET);
    pwsaResult->dwNameSpace = NS_BTH;
    pwsaResult->lpBlob = NULL;

    while(WSALookupServiceNext(lphLookup, flags, &buffLen, pwsaResult) != ERROR_SUCCESS){
        result = ((BTH_ADDR)qs->lpcsaBuffer->RemoteAddr.lpSockaddr);
        WSAAddressToString(qs->lpcsaBuffer->RemoteAddr.lpSockaddr, sizeof(SOCKADDR_BTH), NULL, (LPWSTR)buff, &buffLen);
        printf("Found: %s - %s", buff, qs->lpszServiceInstanceName);
    }

    WSALookupServiceEnd(lphLookup);
    free(qs);
    WSACleanup();
    return 0;
}

Microsoft sdk フォルダーにある bthsdpdef.h で、多くの構文エラーと欠落型エラーが発生しました。そのような:

bthsdpdef.h(11): エラー C2146: 構文エラー: ';' がありません 識別子「LowPart」の前に、

bthsdpdef.h(11): エラー C4430: 型指定子がありません - int と見なされます。注: C++ は default-int をサポートしていません

どうしたの?

4

2 に答える 2

1

ファイルの先頭 (#include の上) に次の行を追加します。これでコンパイルが修正されます。

#define WIN32_LEAN_AND_MEAN 1 // Don't include Winsock v1
#include <windows.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")

コードにはベース ヘッダー ファイルを含める必要があります。それ以外の場合、コンパイラが bthsdpdef.h にアクセスして次の内容を確認すると、ULONGLONG 型の定義がわかりません。

struct SDP_LARGE_INTEGER_16 {
    ULONGLONG LowPart;
    LONGLONG HighPart;
};
于 2012-11-20T09:59:33.977 に答える
0

コンパイラエラーにヒントがあると思います(それは驚くべきことですが、実際に起こります)。

これらはおそらくCAPIですが、C++としてコンパイルしています。ただし、コードは確かにCのように見えるので、コンパイラの呼び出しを再確認してください。

于 2012-11-19T14:31:59.647 に答える