Question

Je travaille sur un projet impliquant l'API client Microsoft Unified Communications; uccapi.dll. J'utilise également CodeGear C ++ Builder 2010, pas Visual Studio. Après avoir enregistré la DLL avec REGSVR32 et l'important comme une bibliothèque de types dans C ++ Builder 2010, les fichiers UCCAPI_TLB- et UCCAPI_OCX ont été générés. Lorsque vous avez importé cela dans mon nouveau projet, j'essaie de suivre Guidage MSDN pour la création d'un client de bureau Communicator capable de se connecter au serveur de communication Office.

À cet égard, j'ai deux questions:

  • Quelle est la bonne façon d'accéder aux interfaces COM fournies via l'OCX?

J'ai jusqu'à présent trouvé plusieurs façons de créer des points d'accès, tels que.

TCOMIUccPlatform plat;
plat = CoUccPlatform::Create();

et

IUccPlatformPtr im;
im = CreateComObject(CLSID_UccPlatform);

et

IUccPlatform* pIUccPlatform;
hr = CoCreateInstance(CLSID_UccPlatform, 
                      NULL, 
                      CLSCTX_INPROC_SERVER, 
                      __uuidof(IUccPlatform), 
                     (void**)&pIUccPlatform);

et

IUccPlatformPtr pIPlat;
pIPlat.CreateInstance(__uuidof(IUccPlatform));

Les trois premiers semblent bien fonctionner. Ce dernier me donnera une assertion échoué: Inf!= 0 Erreur avec 0 × 40000015 Exception. En utilisant l'un des trois top, je peux accéder à des méthodes et initialiser l'interface plate-forme .

Cependant, lorsque vous essayez l'une des mêmes tactiques d'accéder à toute autre interface, telle que iuccontext , iuccurimanager ou iuccuri , qui ont tous Un CLSID défini dans le fichier _TLB.H, je reçois une erreur de "classe non enregistrée" dans les deux premiers cas, soit une défaillance hésulte dans le troisième cas. Ce qui m'amène à ma prochaine question.

  • Utiliser OLE-Viewer Toutes les interfaces sont enregistrées comme elles le devraient. Pourquoi toutes les classes co-crémables dans la DLL ne seraient-elles pas enregistrées lors de l'enregistrement de la DLL? Et quelles pourraient être les raisons pour lesquelles ne agissent-ils pas de la même manière?

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;

Était-ce utile?

La solution

Ce numéro est déjà discuté en détail dans le Embarcadero Forums .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top