Visual c++ 无法将参数1从';ATL::CComPtr<;T>';至';int';
我正在将一个项目从vs 6.0迁移到vs 2008,出现以下错误 错误C2664:“\u com\u ptr\t::\u com\u ptr\t(int)”无法转换 参数1从“ATL::CComPtr”到“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 [
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);