Problemas ao acessar a interface COM uccapi.dll C++
-
18-09-2020 - |
Pergunta
Estou trabalhando em um projeto que envolve a API do cliente de comunicações unificadas da Microsoft;uccapi.dll.Também estou usando o Codegear C++Builder 2010, não o Visual Studio.Depois de registrar a dll com regsvr32 e importá-la como biblioteca de tipos para o C++Builder 2010, os arquivos uccapi_tlb e uccapi_ocx foram gerados.Ao importá-los para o meu novo projeto, estou tentando seguir o diretriz msdn para criar um cliente do Office Communicator capaz de entrar no servidor do Office Communication.
Neste sentido tenho duas perguntas:
- Qual a forma correta de acessar as interfaces com disponibilizadas através do ocx?
Até agora encontrei várias maneiras de criar pontos de acesso, como.
TCOMIUccPlatform plat;
plat = CoUccPlatform::Create();
e
IUccPlatformPtr im;
im = CreateComObject(CLSID_UccPlatform);
e
IUccPlatform* pIUccPlatform;
hr = CoCreateInstance(CLSID_UccPlatform,
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IUccPlatform),
(void**)&pIUccPlatform);
e
IUccPlatformPtr pIPlat;
pIPlat.CreateInstance(__uuidof(IUccPlatform));
Os três primeiros parecem funcionar bem.O último me dará uma afirmação falhada:intf!=0 erro com exceção 0×40000015.Usando qualquer um dos três principais posso acessar métodos e inicializar o plataforma interface.
No entanto, ao tentar qualquer uma das mesmas táticas para acessar qualquer outra interface, como IUccContexto, IUccUriManager ou IUccUri, todos com um clsid definido no arquivo _tlb.h, recebo um erro de "classe não registrada" nos dois primeiros casos ou uma falha de hresult no terceiro caso.O que me leva à minha próxima pergunta.
- Usando o ole-viewer, todas as interfaces são registradas como deveriam.Por que todas as classes co-criáveis na dll não seriam registradas ao registrar a dll?E quais poderiam ser as razões pelas quais eles não agem de forma semelhante?
Edit1 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;
Solução
Esta questão já está sendo discutida em detalhes no Fóruns Embarcadero.