访问uccapi.dll COM接口C ++的问题

时间:2010-07-20 13:44:53

标签: c++ com c++builder-2010 uccapi

我正在开发一个涉及Microsoft Unified Communications Client API的项目; uccapi.dll。我也使用Codegear C ++ Builder 2010,而不是Visual Studio。在使用regsvr32注册dll并将其作为类型库导入C ++ Builder 2010后,生成了uccapi_tlb-和uccapi_ocx文件。将这些项目导入我的新项目后,我正在尝试按照msdn guideline创建可以登录Office Communication Server的Office Communicator客户端。

在这方面,我有两个问题:

  • 访问通过ocx提供的com接口的正确方法是什么?

到目前为止,我已经找到了几种创建接入点的方法,例如。

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 ,所有这些都有在_tlb.h文件中定义的clsid,我在前两种情况下得到“class not registered”错误,或者在第三种情况下得到一个hresult失败。这让我想到了下一个问题。

  • 使用ole-viewer所有接口都按其应有的方式注册。为什么在注册dll时不会注册dll中的所有可共同创建的类?那么他们为什么不采取类似行动的原因可能是什么?
来自UCCAPILib_tlb.h的

Edit1:

// 
// 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;

1 个答案:

答案 0 :(得分:1)

Embarcadero forums已经详细讨论了这个问题。