Domanda

Sto lavorando a un progetto che coinvolge l'API del client di comunicazioni Unified Microsoft; uccapi.dll. Sto anche usando CodeGear C ++ Builder 2010, non Visual Studio. Dopo aver registrato la DLL con RegsvR32 e l'importazione come libreria di tipo in C ++ Builder 2010, sono stati generati i file UCCAPI_TLB- e UCCAPI_OCX. Quando avendo importato questi nel mio nuovo progetto, sto cercando di seguire il Linea guida MSDN per la creazione di un client di Communicator Office in grado di firmare nel server di comunicazione Office.

A questo proposito ho due domande:

    .
  • Qual è il modo corretto di accedere alle com-interfacce rese disponibili tramite OCX?

Ho finora trovato diversi modi per creare punti di accesso, come ad esempio.

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));
.

I tre sembrano lavorare bene. Quest'ultimo mi darà un'asserzione fallita: INTF!= 0 Errore con eccezione 0 × 40000015. Usando uno dei tre migliori che posso accedere ai metodi e inizializzare l'interfaccia Platform .

tuttavia quando si prova una delle stesse tattiche per accedere a qualsiasi altra interfaccia, ad esempio IUCCContext , IUCCurimanager o IUCCURI , che hanno tutto Un CLSID definito nel file _tlb.h, o ottengo un'errore "classe non registrata" nei primi due casi o un errore hresult nel terzo caso. Che mi porta alla mia prossima domanda.

    .
  • Utilizzo di OLE-Viewer Tutte le interfacce sono registrate come dovrebbero. Perché non sarebbero state registrate tutte le classi co-creabili nella DLL durante la registrazione della DLL? E quali potrebbero essere i motivi per cui non agiscono allo stesso modo?

edit1 da 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;
.

È stato utile?

Soluzione

Questo problema è già stato discusso in dettaglio in Forum Embarcadero .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top