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;
}
但是您必须保证您通过引用传递的字符串对象 aspostData
将至少在_postData
指向它时保持活动状态。实际上,_postData
指向返回的内部位置c_str()
此外,您似乎将使用c_str()
as返回的值LPWSTR
。要使用 LPWSTR,您需要从 ANSI 转换为宽字符,例如,使用MultiByteToWideChar函数。
换句话说,从一个指针到另一个指针的转换本身不是问题。问题是保证正确的对象生命周期和使用。