Microsoft ユニファイド コミュニケーション クライアント API を含むプロジェクトに取り組んでいます。uccapi.dll。Visual Studio ではなく、Codegear C++Builder 2010 も使用しています。dll を regsvr32 に登録し、タイプ ライブラリとして C++Builder 2010 にインポートした後、uccapi_tlb ファイルと uccapi_ocx ファイルが生成されました。これらを新しいプロジェクトにインポートしたとき、Office Communication サーバーにサインインできる Office Communicator クライアントを作成するためのmsdn ガイドラインに従おうとしています。
この点に関して、2 つの質問があります。
- 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));
最初の3つはうまく機能しているようです。後者は私に Assertion failed: intf!=0 error with 0×40000015 exception を与えます。上位 3 つのメソッドのいずれかを使用して、メソッドにアクセスし、プラットフォームインターフェイスを初期化できます。
ただし、 IUccContext 、 IUccUriManager、IUccUriなどの他のインターフェイスにアクセスするために同じ戦術を試してみると、すべて _tlb.h ファイルで定義された clsid があり、最初の 2 つで「クラスが登録されていません」というエラーが発生します。ケース、または 3 番目のケースの 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;