我正在研究一个涉及Microsoft统一通信客户端API的项目; UCCAPI.dll。我也使用Codegear C ++ Builder 2010,而不是Visual Studio。使用Regsvr32注册DLL并将其作为类型库导入C ++ Builder 2010后,生成UCCAPI_TLB和UCCAPI_OCX文件。当将这些导入我的新项目时,我正在尝试遵循 MSDN指南用于创建办公室通信器客户端可以登录Office通信服务器。

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

  • 访问通过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,我要么在前两种情况下获取“未注册的类”错误,或第三种情况下的HResult失败。这让我带来了我的下一个问题。

    使用OLE-Viewer使用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;
.

有帮助吗?

解决方案

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top