Я работаю над проектом с использованием клиентского 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.Используя любой из трех лучших, я могу получить доступ к методам и инициализировать интерфейс platform .
Однако при попытке любой из тех же тактик получить доступ к любому другому интерфейсу, например, 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;