程序如下:
static BOOL PerformInquiry()
 {
  WSAQUERYSET wsaq;
  HANDLE hLookup;
union {
  CHAR buf[5000];
  double __unused; // ensure proper alignment
};
 
  LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
  DWORD dwSize = sizeof(buf);
  BOOL bHaveName;
ZeroMemory(&wsaq, sizeof(wsaq));
  wsaq.dwSize = sizeof(wsaq);
  wsaq.dwNameSpace = NS_BTH;
  wsaq.lpcsaBuffer = NULL;
if (ERROR_SUCCESS != WSALookupServiceBegin (&wsaq, LUP_CONTAINERS, &hLookup))
{
  DWORD dwError = GetLastError();
  wprintf(L"WSALookupServiceBegin failed %d\r\n", GetLastError());
return FALSE;
  }
 
  ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
  pwsaResults->dwSize = sizeof(WSAQUERYSET);
  pwsaResults->dwNameSpace = NS_BTH;
  pwsaResults->lpBlob = NULL;
  while (ERROR_SUCCESS == WSALookupServiceNext (hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults))
  {
  ASSERT (pwsaResults->dwNumberOfCsAddrs == 1);
  //BT_ADDR b = ((SOCKADDR_BTH *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr)->btAddr;
  bHaveName = pwsaResults->lpszServiceInstanceName && *(pwsaResults->lpszServiceInstanceName);
  //wprintf (L"%s%s%04x%08x%s\n", bHaveName ? pwsaResults->lpszServiceInstanceName : L"",
  // bHaveName ? L"(" : L"", GET_NAP(b), GET_SAP(b), bHaveName ? L")" : L"");
OutputDebugStringW(pwsaResults->lpszServiceInstanceName);
OutputDebugStringW(L"\n");
 
  }
  WSALookupServiceEnd(hLookup);
  return TRUE;
 }
出错:
: error C2664: 'OutputDebugStringW' : cannot convert parameter 1 from 'char *' to 'const unsigned short *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
如何解决呢?网上查了很多这个错误的解决方法,可结果五花八门,疯掉了要 

解决方案 »

  1.   


    看过了。
    估计你的工程不是 UNICODE 工程;而 OutputDebugStringW 需要宽字符串;
    把你的工程改成 UNICODE 就好了;
    或者实现非 UNICODE 的 OutputDebugStringW 函数。
      

  2.   

    第一个 OutputDebugStringW 修改为 OutputDebugStringWINBASEAPI VOID WINAPI OutputDebugStringA( LPCSTR lpOutputString );
    WINBASEAPI VOID WINAPI OutputDebugStringW( LPCWSTR lpOutputString );
    #ifdef UNICODE
     #define OutputDebugString  OutputDebugStringW
    #else
     #define OutputDebugString  OutputDebugStringA
    #endif // !UNICODE