Мне нужно отправить значение VARIANT в другое приложение, используя COPYDATASTRUCT. Вот структура, которую я использую для отправки сообщений.
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);
Это сообщение успешно получает мое второе приложение, ОДНАКО, когда я возвращаю его обратно в исходную структуру, "bstrVal" указывает на неверный указатель .
Я борюсь с этой ошибкой, так что жду вашей ценной помощи. Обратите внимание, что другие типы varinat (int, double) могут быть успешно преобразованы обратно, и эта ошибка только с bstr. (
Спасибо