2015-04-23 2 views
1

я реализую в C++ в Windows 8 Spell Checking COM service без ATL, но когда msspellcheckinghost.exe Windows' называет мое ISpellCheckProviderFactory::SupportedLanguages() она проходит nullptr как из пар, к которым я, естественно, вернуть E_POINTER ... который результаты в неисправность и сообщение журнала события:Проверка орфография API Win8 посылает нуль, как из паров

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

Когда я делаю класс завода и использовать загрузчик DLL ATL, то хост вызывает функцию правильно. Это не имеет смысла, так как последующая реализация не ATL EnumString используется правильно. Итак, почему ATL может потребоваться для завода, но не после?

Что еще хуже, так это то, что я понятия не имею, как подключить отладчик к хосту, так как msspellcheckinghost.exe недокументирован, поэтому не поймите, что ему передать.

Источник проекта доступен по адресу https://github.com/TinoDidriksen/spellers/tree/master/win8 - прототипы в основном копируются из собственного образца проекта Microsoft, но я разорвал детали ATL, потому что хочу, чтобы GUID загружались из файла конфигурации во время выполнения (эта часть работает).

То же самое происходит с 32-разрядной ОС + DLL, поэтому не имеет к этому никакого отношения.

+0

Является ли сам аргумент 'nullptr' или значением, на которое он указывает? – acelent

+0

@PauloMadeira, сам аргумент, который является проблемой. Я знаю, что мне нужно присваивать значение '* value', но я не могу этого сделать, когда' value' сам имеет значение NULL. –

+0

Ну, это полный провал кита, маловероятно, что кто-то здесь может помочь вам в этом, когда вы не покажете нам небольшой репродуцирующий проект. Угадывание неправильного соглашения о вызове или неправильного указателя интерфейса - это скорее растяжка. Нет стека вызовов, чтобы вывести предположение. Используйте телефон, позвоните в службу поддержки Microsoft. –

ответ

0

С help of MS forums, проблема оказалась в том, что ISpellCheckProviderFactory не является IClassFactory и DLL должен возвращать правильное IClassFactory, что в свою очередь может CreateInstance() фактического поставщика завода.