2015-04-23 10 views
1

我实现在C++ Windows 8 Spell Checking COM service没有ATL,但是当Windows的msspellcheckinghost.exe叫我ISpellCheckProviderFactory::SupportedLanguages()它传递nullptr作为出PARAM,而我自然地回归E_POINTER ...这导致故障和事件日志消息:Win8中的拼写检查API发送null作为出PARAM

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

当我做工厂类和DLL加载器使用ATL,则主机正确调用函数。这是没有道理的,因为随后的非ATL EnumString实现正确使用。那么,为什么工厂需要ATL而不是之后呢?

更糟糕的是,我不知道如何将调试器附加到主机上,因为msspellcheckinghost.exe没有记录,所以不知道要传递给它。原型基本上是从微软自己的示例项目中拷贝过来的,但是我将ATL部分撕掉了,因为我想在运行时(这部分工作)从配置文件加载GUID。

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

+0

参数本身为'nullptr'还是它指向的值? – acelent

+0

@PauloMadeira,争论本身,这是问题。我知道我必须分配给'* value',但是当'value'本身为空时我不能这样做。 –

+0

那么,这是一条完全失败的鲸鱼,当你没有向我们展示一个小的repro项目时,这里的任何人都不能帮助你。猜错错误的调用约定或者错误的接口指针是相当有弹性的。没有调用堆栈来推断猜测。使用电话,致电Microsoft支持。 –

回答

0

随着help of MS forums,问题竟然是那ISpellCheckProviderFactory不是IClassFactory和DLL必须返回一个适当的IClassFactory这反过来又可以CreateInstance()实际的供应商工厂。