2009-12-09 4 views
0

C++ J'ai quelques interfaces C# exposées à COM:C# serveur COM - Test de

interface IMyInterface 
{ 
    IMyListObject[] MyList 
    { 
    get; 
    } 
} 

interface IMyListObject 
{ 
//properties that don't matter 
} 

Jusqu'à présent, je teste comment notre ensemble est exposé à COM de C++ et la plupart fonctionne très bien.

Mon problème actuel est à un point J'ai 2 instances de IMyInterface et j'ai besoin de copier d'un MyList à l'autre.

Si je viens d'appeler cela en C++:

myInterfaceB->MyList = myInterfaceA->MyList; 

Cela donne le HRESULT de E_POINTER. MyList renvoie un SAFEARRAY *, le code équivalent fonctionne très bien en C#.

Je ne suis généralement pas un développeur C++, comment résoudre ce problème?

Répondre

2

Vous ne savez pas si E_POINTER est logique ou pourquoi cela fonctionnerait en C#. Cela ne peut pas fonctionner, votre propriété MyList n'a pas de setter de propriété. Il n'en a pas vraiment besoin, vous n'avez pas besoin de changer le tableau, seulement le contenu du tableau. Utilisez les fonctions SafeArrayXxxx(), en utilisant les wrappers ATL CComSafeArray ou MFC COleSafeArray le rend plus facile.

+0

Le problème était que j'exposais le tableau en tant que classe au lieu de l'interface qui était exposée à com. Avoir quelques points gratuits pour répondre. – jonathanpeppers