Win8的拼写检查API将out作为out参数发送

时间:2015-04-23 21:35:33

标签: c++ windows-8 com atl spell-checking

我在没有ATL的情况下在C ++中实现Windows 8 Spell Checking COM service,但是当Windows的msspellcheckinghost.exe调用我的ISpellCheckProviderFactory::SupportedLanguages()时,它将nullptr作为out param传递给我,我自然会返回E_POINTER {{ 1}} ...导致失败和事件日志消息:

Failed instantiating third-party spellchecking provider: CLSID {...}, HRESULT 0x80004003.

当我使工厂类和DLL加载器使用ATL时,主机正确调用该函数。这没有任何意义,因为正确使用了后续的非ATL EnumString实现。那么为什么工厂需要ATL,而不是之后?

更糟糕的是,我不知道如何将调试器附加到主机,因为msspellcheckinghost.exe没有记录,所以不知道传递给它的是什么。

项目源可以在https://github.com/TinoDidriksen/spellers/tree/master/win8获得 - 原型基本上是从微软自己的示例项目中复制的,但我把ATL部分撕掉了,因为我希望在运行时从配置文件中加载GUID(该部分有效) )。

同样的事情发生在32位OS + DLL上,因此与此无关。

1 个答案:

答案 0 :(得分:0)

使用help of MS forums,问题原来是ISpellCheckProviderFactory不是IClassFactory,并且DLL必须返回正确的IClassFactory,而CreateInstance()可以{{1}} 1}}实际的提供者工厂。