2012-11-19 63 views
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中獲得了很多語法和缺少的類型錯誤。 如:藍牙SDK標頭中的錯誤

bthsdpdef.h(11):錯誤C2146:語法錯誤:缺少';'在標識符'LowPart'之前,

bthsdpdef.h(11):錯誤C4430:缺少類型說明符 - int假定。注:C++不支持default-int

有什麼問題?

回答

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; 
}; 
+0

你是我的王! – programmer

0

我認爲編譯器中有一個提示錯誤(我知道,這很令人驚訝,但它確實發生)。

這些很可能是C API,但是您正在編譯爲C++。你的代碼當然看起來像C,所以仔細檢查你的編譯器調用。

+0

那麼我如何編譯我的代碼爲C而不是C++? (vC++ 2010) – programmer

+0

我改變了編譯屬性 - > c/C++ - >高級 - >編譯爲C ,仍然有錯誤:( – programmer