COPYDATASTRUCTを使用してVARIANT値を別のアプリケーションに送信する必要があります。これが私がメッセージを送信するために使用している構造です。
struct {
int i_MsgId;
VARIANT variant_Value;
}Message;
私のコードでは、VARIANTを初期化してBSTRと入力し、次のように文字列を割り当てます。
Message structMessage;
VariantInit(&structMessage.variant_Value);
structMessage.var_Value.vt = VT_BSTR;
structMessage.variant_Value.bstrVal = ::SysAllocString(L"I am a happy BSTR");
次に、COPYDATASTRUCTを使用してこれを次のように送信します。
COPYDATASTRUCT structCDS;
structCDS.cbData = sizeof(structMessage);
structCDS.dwData = 12;
structCDS.lpData = (LPVOID)(&structMessage);
::SendMessage(this->m_RemoteWindow,WM_COPYDATA,(WPARAM)this->GetSafeHwnd(),(LPARAM)&structCDS);
このメッセージは2番目のアプリケーションに正常に受信されますが、元の構造体にキャストバックすると、「bstrVal」は不正なポインターを示します。
私はこのエラーに苦しんでいるので、あなたの貴重な助けを期待しています。他のvarinatタイプ(int、double)は正常に変換して戻すことができ、このエラーはbstrでのみ発生することに注意してください。:(
ありがとうございました