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转换为宽字符。
换句话说,从一个指针到另一个指针的转换本身不是问题。问题是保证适当的对象的使用寿命和使用。