Text Services Framework无法将全局分隔区值设置为VT_BSTR



我使用TSF全局分区为进程间通信编写了一个测试应用程序(.exe(,当变量类型为VT_I4时,以下代码可以正常工作,但对于VT_BSTR,ITfCompartment::SetValue返回S_FALSE,并且不会在文本服务(IME(上触发OnChange回调。

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封送处理层下运行(,封送字符串或对象是不可能的。

相关内容

  • 没有找到相关文章

最新更新