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, вам нужно, например, преобразовать ANSI в широкие символы, используя функцию MultiByteToWideChar .
Другими словами, преобразование из одного указателя в другой само по себе не является проблемой. Проблема состоит в том, чтобы гарантировать надлежащее время жизни и использования объектов.