Если ваша библиотека реализована на C ++ и имеет отладочную информацию, вы также можете попробовать отладку с помощью MSVC, чтобы перейти в CoCreateInstance.
Полагаю, вы пропустили правильное сопоставление вашего класса с одним из интерфейсов. Я сделал это несколько раз по ошибке. Если вы используете ATL, вам нужно убедиться, что ваш реализующий класс является производным от интерфейса, а также вы добавили COM_INTERFACE_ENTRY(I____)
для вашего интерфейса в COM_MAP:
BEGIN_COM_MAP(CFileHelper)
COM_INTERFACE_ENTRY(IFileHelper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IStream)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
Или, возможно, GUID отличается между файлом IDL и тем, что находится в реализующем файле C ++. MSVC6 имеет досадную ошибку, из-за которой мастеру не удается создать новый класс из-за прав доступа к файлу (например, некоторые файлы, которые он хочет изменить, доступны только для чтения), но он уже добавил GUID в файл IDL, и вы исправляете разрешите доступ к файлу и перейдите, чтобы сделать это снова, в GUID будет несогласованность, и это трудно уловить. В идеальном случае определения GUID хранятся ТОЛЬКО в одном файле, и вам не придется об этом беспокоиться.
Если нет, то иногда возникают странные ошибки, связанные с маршалингом и квартирами, но они появляются только в том случае, если у вас есть несколько потоков и вы отправляете указатели интерфейса через границы потока или интерфейса.