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からワイド文字に変換する必要があります。
言い換えれば、あるポインタから別のポインタへの変換自体は問題ではありません。問題は、適切なオブジェクトの寿命と使用法を保証することです。