问题描述
我编写了一个用于使用TSF全局隔离专线进行进程间通信的测试应用程序(.exe),并且当变量类型为VT_I4时,以下代码可以正常工作,但是对于VT_BSTR,ITfCompartment :: SetValue返回S_FALSE,而OnChange回调不在文字服务(IME)上触发。
ITfCompartment :: SetValue的S_FALSE甚至没有记录在MSDN上,我想这意味着操作成功了,但没有效果。
任何人都可以提出一些有关如何解决此问题的想法吗?谢谢!
ITfThreadMgr *pThreadMgr;
if (Failed(CoCreateInstance(CLSID_TF_ThreadMgr,nullptr,CLSCTX_INPROC_SERVER,IID_ITfThreadMgr,(void **)&pThreadMgr)))
{
return;
}
if (Failed(pThreadMgr->Activate(&m_tfClientID)))
{
return;
}
ITfCompartmentMgr *pCompartmentMgr;
if (pThreadMgr->GetGlobalCompartment(&pCompartmentMgr) != S_OK)
{
return;
}
ITfCompartment *pCompartment;
if (pCompartmentMgr->GetCompartment(TheGlobalCompartmentGUID,&pCompartment) != S_OK)
{
pCompartment = nullptr;
pCompartmentMgr->Release();
return;
}
VARIANT varValue;
varValue.vt = VT_BSTR;
varValue.bstrVal = SysAllocString(L"abc");
//varValue.vt = VT_I4;
//varValue.lVal = 1;
HRESULT hr = pCompartment->SetValue(m_tfClientID,&varValue);
if (hr != S_OK)
{
OutputDebugString(L"SetValue Failed");
}
pCompartment->Release();
pCompartmentMgr->Release();
解决方法
简短的答案是,您只能在全局隔离专区中存储整数。考虑到TSF全局隔离专区的工作方式(在COM封送处理层下面运行),无法封送字符串或对象。