COPYDATASTRUCT를 사용하여 다른 응용 프로그램에 VARIANT 값을 보내야합니다. 다음은 메시지를 보내는 데 사용하는 구조입니다.COPYDATASTRUCT를 통해 VARIANT_bstr을 보내는 방법
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에서만 발생합니다. :(
는 감사