2014-04-13 59 views
1

winapi函數WinHttpSendRequest()需要第三個參數的大小和第五個參數的大小。
我該如何計算它?
我纏着一個功能,我直接通過字符串,大約是這樣的:C++獲取LPCWSTR和LPVOID的長度

void Req(LPCWSTR headers, LPVOID body) { 
    WinHttpSendRequest(hRequest, headers, (DWORD)strlen(headers), body, (DWORD)strlen(body), 0, 0); 
} 
Req(L"User-Agent: blabla/1.0\r\nConnection: Keep Alive", "asdf=qwer&abcd=1234); 

上面的代碼不起作用。 :/
我希望你能幫助我。

+0

'strlen'適用於窄字符串,不適用於寬字符串。 'void *'沒有長度。我建議爲第二個參數採用一個實際的字符串,如果需要,它會隱式轉換爲'const void *'。 – chris

+0

我如何將它轉換爲const void *? – Forivin

+0

如果你使用非const字符串,它會自動完成,否則它會轉換爲'const void *'。由於該函數採用非常量函數,因此假定它不修改它並不安全,並且修改類似字符串文字的內容非常糟糕。你總是可以接受一個常量字符串,並從中構建一個非常量字符串。並且可能使用實際的C++字符串,這對您的函數使用更自然。 – chris

回答

3

。對於寬字符串,您需要使用wcslen而不是strlen

+0

這似乎適用於LPCWSTR! :)你知道一些像LPVOID的功能嗎? – Forivin

+0

@Forivin:不存在 – deviantfan

+0

@Forivin您需要知道'body'的實際類型才能找到它的長度。如果它也是一個寬字符串,那麼你可以在函數中將它強制轉換,或者在函數頭中接受它。 – ooga