Quelle est la différence entre les deux lignes de code ci-dessous:COM Object Clean Up
CComPtr<IInterface> m_interface;
IInterface* m_interface;
Je sais que CComPtr aider à éliminer les fuites de mémoire, mais je reçois des résultats incohérents. Lors de la déclaration du pointeur avec CComPtr<IInterface> m_interface;
et en utilisant l'interface dans mon code C# il n'y a pas d'erreurs, mais en utilisant l'interface dans VC++, j'obtiens une erreur d'exception non gérée, même si je commente la création d'instance de IInterface.
Je suis assez sûr que le problème est ici quelque part:
STDMETHODIMP CSomeClass::get_IClass(IClass** var)
{
return m_class_var->QueryInterface(var);
}
STDMETHODIMP CSomeClass::putref_IClass(IClass* var)
{
m_class_var = var;
return S_OK;
}
Lorsque je déclare le pointeur d'interface avec: IInterface* m_interface;
-je obtenir une erreur de RPC_E_SERVERFAULT lors du test de l'interface en C# et doivent appeler explicitement GC. Collect() pour éviter que l'erreur ne soit lancée après l'instanciation de quelques objets. Lors du test de l'interface dans VC++, l'erreur est cohérente mais lorsqu'elle se produit est différente. Si je commente la création d'instance de IInterface le code fonctionne bien, cependant quand j'essaye de créer une instance je reçois la même erreur qu'avant, juste une erreur d'exception vague non gérée. Qu'est-ce que je fais mal ici?
Vous devriez vraiment passer 15 minutes élaboration d'un extrait très court qui démontrerait le problème. – sharptooth
Vous dites "en utilisant l'interface dans VC++ je reçois une erreur d'exception non gérée" - pouvez-vous nous montrer le code en utilisant l'interface dans VC++? –