Failed CoCreateInstance - PullRequest
       12

Failed CoCreateInstance

1 голос
/ 13 июля 2011

У меня есть функция, где я вызываю CoCreateInstance.Эта функция вызывается несколько раз, и она работает, однако один раз CoCreateInstance завершается ошибкой с ошибкой «неверный тип переменной».Дело в том, что параметры всегда одинаковы как в случае успеха, так и в случае неудачи.Что может вызвать это?

Ответы [ 2 ]

2 голосов
/ 20 июля 2015

В моем коде также была функция, вызывающая CoCreateInstance (...).Когда один раз это работало, а в другое - нет, без изменения кода.
Но при просмотре возвращенного HRESULT получилась ошибка Out of Memeory, «E_OUTOFMEMORY исчерпал память».Я провел некоторое исследование относительно предметов и нашел следующие причины, по которым это может произойти.

  1. Сначала вы должны вызвать CoInitialize ()

Должна быть вызвана функция CoInitialize.до вызова функции CoCreateInstance

Неправильная регистрация COM-объекта

Это может часто происходить, когда COM-объект (или заглушка прокси) не был зарегистрирован должным образом.Вы можете проверить регистрацию COM-объекта с помощью инструмента Oleview, пытаясь создать экземпляр объекта.

Файл Oleview.exe входит в состав Windows SDK, расположение обычно находится в C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0 \ Bin.

Если его там нет, выможете попробовать установить Microsoft Windows SDK для Windows Server 2008: http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en.

Примечание: это не только для Windows 2008, оно просто названо в честь последней версии Windows и поддерживает Windows Server 2003;Windows Server 2008;Виндоус виста;Windows XP.

Отсутствует, повреждены неверные версии DLL

Для меня это происходило в конфигурации разных проектов, в режиме отладки я обнаружил исключение, но в Release оно не появилось.

1 голос
/ 20 июля 2011

Я исправил это.Звонок был сделан из разных тем.Когда вызов завершился успешно, он был вызван из основного потока.При неудаче источником был другой поток, и CoInitialize () не вызывался заранее.Вызов CoInitialize решил проблему.

...