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;
Foi útil?

Solução

Esta questão já está sendo discutida em detalhes no Fóruns Embarcadero.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top