Проблемы с доступом uccapi.dll COM-интерфейс C++
Я работаю над проектом с использованием клиентского API Microsoft Unified Communications; uccapi.dll. Я также использую Codegear C++Builder 2010, а не Visual Studio. После регистрации библиотеки DLL в regsvr32 и ее импорта в качестве библиотеки типов в C++ Builder 2010 были созданы файлы uccapi_tlb- и uccapi_ocx. Импортируя их в мой новый проект, я пытаюсь следовать руководству msdn для создания клиента Office Communicator, способного выполнять вход на сервер Office Communication.
В связи с этим у меня есть два вопроса:
- Как правильно получить доступ к com-интерфейсам, доступным через ocx?
До сих пор я нашел несколько способов создания точек доступа, таких как.
TCOMIUccPlatform plat;
plat = CoUccPlatform::Create();
а также
IUccPlatformPtr im;
im = CreateComObject(CLSID_UccPlatform);
а также
IUccPlatform* pIUccPlatform;
hr = CoCreateInstance(CLSID_UccPlatform,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IUccPlatform),
(void**)&pIUccPlatform);
а также
IUccPlatformPtr pIPlat;
pIPlat.CreateInstance(__uuidof(IUccPlatform));
Три первых, кажется, работают хорошо. Последнее даст мне утверждение не удалось: intf!=0 ошибка с исключением 0×40000015. Используя любой из трех лучших, я могу получить доступ к методам и инициализировать интерфейс платформы.
Однако при попытке использовать любую из тех же тактик для доступа к любому другому интерфейсу, например, IUccContext, IUccUriManager или IUccUri, у каждого из которых есть clsid, определенный в файле _tlb.h, я либо получаю ошибку "класс не зарегистрирован" в первых двух случаи, или провал hresult в третьем случае. Что подводит меня к следующему вопросу.
- С помощью ole-viewer все интерфейсы регистрируются как должны. Почему не все совместимые классы в dll регистрируются при регистрации dll? И каковы могут быть причины, по которым они не действуют подобным образом?
Edit1 из UCCAPILib_tlb.h:
//
// COCLASS DEFAULT INTERFACE CREATOR
// CoClass : UccPlatform
// Interface: TCOMIUccPlatform
//
typedef TCoClassCreatorT<TCOMIUccPlatform, IUccPlatform, &CLSID_UccPlatform, &IID_IUccPlatform> CoUccPlatform;
//
// COCLASS DEFAULT INTERFACE CREATOR
// CoClass : UccUriManager
// Interface: TCOMIUccUriManager
//
typedef TCoClassCreatorT<TCOMIUccUriManager, IUccUriManager, &CLSID_UccUriManager, &IID_IUccUriManager> CoUccUriManager;