Win8 的拼写检查 API 将 null 作为输出参数发送

Win8's Spell Checking API sends null as out param

我在没有 ATL 的 C++ 中实现 Windows 8 Spell Checking COM service,但是当 Windows' msspellcheckinghost.exe 调用我的 ISpellCheckProviderFactory::SupportedLanguages() 时,它传递 nullptr 作为输出参数,我自然 return E_POINTER ...导致失败和事件日志消息:

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

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

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

项目源代码可在 https://github.com/TinoDidriksen/spellers/tree/master/win8 - 原型基本上是从 Microsoft 自己的示例项目中复制的,但我撕掉了 ATL 部分,因为我希望在运行时从配置文件加载 GUID(即部分作品)。

同样的事情发生在 32 位 OS+DLL 上,所以与那个无关。

对于 help of MS forums,问题是 ISpellCheckProviderFactory 不是 IClassFactory,DLL 必须 return 是正确的 IClassFactory反过来可以 CreateInstance() 实际的提供者工厂。