Visual c++ 无法将参数1从';ATL::CComPtr<;T>';至';int';

Visual c++ 无法将参数1从';ATL::CComPtr<;T>';至';int';,visual-c++,com,Visual C++,Com,我正在将一个项目从vs 6.0迁移到vs 2008,出现以下错误 错误C2664:“\u com\u ptr\t::\u com\u ptr\t(int)”无法转换 参数1从“ATL::CComPtr”到“int” 输出窗口: with [ _IIID=_com_IIID<XML::IXMLDOMNode,& _GUID_2933bf80_7b36_11d2_b20e_00c04f983e60> ] and [

我正在将一个项目从vs 6.0迁移到vs 2008,出现以下错误

错误C2664:“\u com\u ptr\t::\u com\u ptr\t(int)”无法转换 参数1从“ATL::CComPtr”到“int”

输出窗口:

with
    [
        _IIID=_com_IIID<XML::IXMLDOMNode,& _GUID_2933bf80_7b36_11d2_b20e_00c04f983e60>
    ]
    and
    [
        T=XML::IXMLDOMNode
    ]
我理解错误是因为编译器无法将oIte从“ATL::CComPtr”转换为“int”。我对COM非常陌生,非常感谢您对修复此错误的任何帮助。先谢谢你

问候,,
Ankush.

问题是由于某种原因,
*oIte
的类型是
ATL::CComPtr
\u com\u ptr\t
(模板指针的类型
spNode
)没有接受
CComPtr&
的构造函数,但它有两个构造函数,一个接受
int
,另一个接受
接口*
,编译器无法选择正确的构造函数。您必须明确地告诉编译器,您希望构造函数接受
接口*
,为了实现这一点,您必须告诉它提取存储在成员变量
CComPtr::p
中的封装的
接口*

XML::IXMLDOMNodePtr spNode((*oIte).p);

哇,锋利的牙齿。这很有魅力。非常感谢您的修复和解释。
_COM_SMARTPTR_TYPEDEF(IXMLDOMNode, __uuidof(IXMLDOMNode));
XML::IXMLDOMNodePtr spNode((*oIte).p);