Pregunta

Estoy trabajando en un proyecto que involucra a la API del cliente de Microsoft Unified Communications; uccapi.dll. También estoy usando CodeGear C ++ Builder 2010, no Visual Studio. Después de registrar el DLL con REGSVR32 e importarlo como tipo de biblioteca en C ++ Builder 2010, se generaron UCCAPI_TLB- y UCCAPI_OCX-Files. Al haber importado estos en mi nuevo proyecto, estoy tratando de seguir el MSDN GUENTLINE para crear un cliente de Office Communicator Capaz de firmar en el servidor de comunicación de Office.

En este sentido, tengo dos preguntas:

  • ¿Cuál es la forma correcta de acceder a las interfaces COM puso a disposición a través del OCX?

Hasta ahora he encontrado varias formas de crear puntos de acceso, como.

TCOMIUccPlatform plat;
plat = CoUccPlatform::Create();

y

IUccPlatformPtr im;
im = CreateComObject(CLSID_UccPlatform);

y

IUccPlatform* pIUccPlatform;
hr = CoCreateInstance(CLSID_UccPlatform, 
                      NULL, 
                      CLSCTX_INPROC_SERVER, 
                      __uuidof(IUccPlatform), 
                     (void**)&pIUccPlatform);

y

IUccPlatformPtr pIPlat;
pIPlat.CreateInstance(__uuidof(IUccPlatform));

Los tres primero parecen funcionar bien. Este último me dará una afirmación fallida: INTF!= 0 Error con 0 × 40000015 Excepción. Uso de cualquiera de los tres primeros para acceder a los métodos e inicializar la interfaz plataforma .

Sin embargo, al intentar cualquiera de las mismas tácticas para acceder a cualquier otra interfaz, como iucccontext , iuccurimanager o iuccuri , todos los cuales tienen Un CLSID definido en el archivo _tlb.h, obtengo un error de "clase no registrado" en los dos primeros casos, o una falla de Hresult en el tercer caso. Lo que me lleva a mi siguiente pregunta.

  • usando OLE-Viewer Todas las interfaces están registradas como deberían. ¿Por qué no todas las clases co-creadoras en la DLL se registrarían al registrar la DLL? ¿Y cuáles podrían ser las razones por las que no actúan de manera similar?

Editar1 de 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;

¿Fue útil?

Solución

Este problema ya se está discutiendo en detalle en la Foros de Embarcadero .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top