J'ai une variable membre a déclaré queexception lors de la destruction de CComPtr
CComPtr<IXMLDOMDocument2> m_spXMLDoc;
document XML est créé comme celui-ci
CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument2, (void**)&m_spXMLDoc));
Maintenant, quand les sorties de l'application, une exception est levée. Callstack pointe vers p->Release()
~CComPtrBase() throw()
{
if (p)
p->Release();
}
Quand je passe la souris sur la p
dans débogueur VS, il pointe une mémoire valide.
Les derniers points de callstack à exception dans msxm6
msxml6.dll!3d6cXX03()
Toutes les suggestions, ce qui pourrait être la raison? Je ne pense pas que ce soit un problème CComPtr
.
La libération manuelle() s ou une mauvaise utilisation d'autres CComPtrs (par exemple, via 'Attach()') peut être une raison. Si tout le reste semble correct, il peut également y avoir une corruption de mémoire résultant d'autres problèmes. –
Quelle est la durée de vie de l'objet? Quand le destructeur est-il appelé? –
Avez-vous déjà compris la raison? Je viens de rencontrer un problème similaire (sauf que j'utilise les classes Debug Interface Access SDK COM, mais probablement les classes COM utilisées ne sont pas concernées). Je suspecte que c'est quelque chose lié au bogue d'implémentation de CComPtr ou n'importe quoi. – JavaMan