Я реализую Windows 8 Проверка орфографии COM-сервис в C ++ без ATL, но когда Windows ‘msspellcheckinghost.exe вызывает мой ISpellCheckProviderFactory::SupportedLanguages()
это проходит nullptr
как выходной параметр, к которому я, естественно, возвращаюсь E_POINTER
… что приводит к ошибке и сообщению журнала событий:
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, поэтому не имеет к этому никакого отношения.
С помощь форумов MS, проблема оказалась в том, что ISpellCheckProviderFactory
это не IClassFactory
и DLL должна возвращать правильное IClassFactory
что в свою очередь может CreateInstance()
фактический провайдер фабрики.