我正在将项目从vs 6.0迁移到vs 2008,我收到以下错误,
错误C2664:'_ com_ptr_t< _IIID> :: _ com_ptr_t(int)':无法转换 参数1从'ATL :: CComPtr'到'int'
输出窗口:
with
[
_IIID=_com_IIID<XML::IXMLDOMNode,& _GUID_2933bf80_7b36_11d2_b20e_00c04f983e60>
]
and
[
T=XML::IXMLDOMNode
]
我无法解决此问题。同样在vs 6.0中运行良好,我确实理解很多东西已经从vs 6.0变为vs 2008.
以下错误的详情:
bool CXMLHelper::GetFirstSubRecord()
{
bool bFound = false;
if ( m_spXMLNode == NULL ) return false;
if ( VARIANT_TRUE == m_spXMLNode->hasChildNodes() )
{
typedef object_iterator<XML::IXMLDOMNode> iterator;
for ( iterator oIte(m_spXMLNode->childNodes); oIte != iterator(); ++oIte )
{
XML::IXMLDOMNodePtr spNode(*oIte); // c2664 error
if ( spNode->hasChildNodes() && !CXMLHelper::HasTextChild(spNode) )
{
m_spXMLNode = spNode;
bFound = true;
break;
}
}
}
return bFound;
}
IXMLDOMNodePt的定义:
_COM_SMARTPTR_TYPEDEF(IXMLDOMNode, __uuidof(IXMLDOMNode));
我理解错误是因为编译器无法将oIte从'ATL :: CComPtr'转换为'int'。我是COM的新手,非常感谢任何修复此错误的帮助。非常感谢。
此致 Ankush。
答案 0 :(得分:3)
问题在于,由于某种原因,*oIte
类型为ATL::CComPtr
而_com_ptr_t
(模板指针spNode
的类型)没有构造函数接受CComPtr&
但它有两个构造函数,一个接受int
,另一个构造Interface*
,编译器无法选择合适的构造函数。您必须明确地告诉编译器您希望构造函数接受Interface*
并实现它必须告诉它提取存储在成员变量Interface*
中的封装CComPtr::p
:< / p>
XML::IXMLDOMNodePtr spNode((*oIte).p);