LPVOID只是void *,因此您可以將任何指針轉換爲任何指針,因爲任何指針都可以轉換爲void *。但是,並不能保證此操作會根據您的期望提供有效的結果。
簡單,LPVOID在以下情況下按照以下方案
int i = 10; // some real data
int* pi = &i; // pointer to data
// convert to opaque pointer, not usable (readable), onlly can be passed around
// for instance to thread procedure
void* pv = pi;
pi = reinterpret_cast<int*>(pv); // convert back to pointer to data
int j = *pi; // access real data
使用
的問題是,你必須保證i
將活着的至少只要訪問數據/通過pv
使用指針。你必須考慮,如果你的W¯¯
所以,你可以這樣做:
bool httpWrapper::setPostData(const string &postData){
_postData = reinterpret_cast<LPVOID>(postData.c_str());
return false;
}
,但你必須保證你通過引用傳遞爲postData
字符串對象將活着的至少只要_postData
指向它。事實上,_postData
指向內部的位置由c_str()
而且回來了,好像你要使用由c_str()
作爲LPWSTR
返回值。要使用LPWSTR,您需要使用MultiByteToWideChar函數從ANSI轉換爲寬字符。
換句話說,從一個指針到另一個指針的轉換本身不是問題。問題是保證適當的對象的使用壽命和使用。