请问可以将一个void*转换成一个IXMLDOMNodePtr!急!再线等!

低调的狮子 2006-11-10 03:51:46
我现在想写一个方法就是通过一个属性值来查询出整个XML文件中符合要求的所有节点指针(IXMLDOMNodePtr),将每个节点指针保存在一个指针列表中(CPtrArray)并返回!保存是成功了,但返回后却不能还原成IXMLDOMNodePtr类型的对象!请问有什么办法解决吗?
...全文
237 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ToperRay 2006-11-10
  • 打赏
  • 举报
回复
把他当成数组用就行了

低调的狮子 2006-11-10
  • 打赏
  • 举报
回复
不好意思 std::vector<IXMLDOMNodePtr> 向量列表这个东东我没有用过!
请问添加对象和读取对象用什么成员方法呢??
ToperRay 2006-11-10
  • 打赏
  • 举报
回复
IXMLDOMNodePtr* docPtr;
void * lpdata = (void*)docPtr;
然后在取的时候
IXMLDOMNodePtr* docPtr1;
docPtr1 = (IXMLDOMNodePtr*)lpdata;

是不是智能指针指的内容被自动西够了啊
低调的狮子 2006-11-10
  • 打赏
  • 举报
回复
这种方法回报一个Error!
D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(690) : error C2227: left of '->QueryInterface' must point to class/struct/union
D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\comip.h(75) : see reference to function template instantiation 'long __thiscall _com_ptr_t<class _com_IIID<struct MSXML2::IXMLDOMNode,&struct __s_GUID _GUID_2933bf80_7b36_11d2_b20e_00c04
f983e60> >::_QueryInterface(void *const & )' being compiled
ToperRay 2006-11-10
  • 打赏
  • 举报
回复
那东西是智能指针,你那样转换的话估计不行,你为什么不保存一个类似std::vector<IXMLDOMNodePtr>的
laolaoliu2002 2006-11-10
  • 打赏
  • 举报
回复
调试跟踪一下,看看,指针对了,但是内容不正确,是不是应该向下面这样呢?
IXMLDOMNodePtr docPtr;
void * lpdata = (void*)docPtr;
然后在取的时候
IXMLDOMNodePtr docPtr1;
docPtr1 = (IXMLDOMNodePtr)lpdata;
低调的狮子 2006-11-10
  • 打赏
  • 举报
回复
IXMLDOMNodePtr* docPtr;
void * lpdata = (void*)docPtr;
然后在取的时候
IXMLDOMNodePtr* docPtr1;
docPtr1 = (IXMLDOMNodePtr*)lpdata;

用这种方法可以转换,但其中的值读取失败!
低调的狮子 2006-11-10
  • 打赏
  • 举报
回复
嗯!
ToperRay 2006-11-10
  • 打赏
  • 举报
回复
强制转换会出错?
低调的狮子 2006-11-10
  • 打赏
  • 举报
回复
能给出用QueryInterface()来转换的相关代码吗?用CPtrArray来循环取值转换成IXMLDOMNodePtr对象!我这里只能取一次,第二次转换失败!
  • 打赏
  • 举报
回复
HRESULT QueryInterface(
REFIID riid, //IXMLDOMNode的iid
LPVOID* obp
);

或者使用std::vector<IXMLDOMNodePtr>这样不好么?
低调的狮子 2006-11-10
  • 打赏
  • 举报
回复
高手进来啊!高手进来啊!高手进来啊!
低调的狮子 2006-11-10
  • 打赏
  • 举报
回复
强行转换会报错的,请问用QueryInterface这个方法进行转换时第一个参数传什么??
laolaoliu2002 2006-11-10
  • 打赏
  • 举报
回复
IXMLDOMNodePtr* docPtr;
void * lpdata = (void*)docPtr;
然后在取的时候
IXMLDOMNodePtr* docPtr1;
docPtr1 = (IXMLDOMNodePtr*)lpdata;
wangfei0206wl 2006-11-10
  • 打赏
  • 举报
回复
只要IXMLDOMNodePtr类型的对象没有释放,从指针列表中读出指针(void*),通过强制类型转换
,应该可以把(void*)转换成IXMLDOMNodePtr类型对象的指针,我想应该是可以使用转换后的指针吧.
  • 打赏
  • 举报
回复
(CPtrArray)保存iunknown类型指针,然后用QueryInterface转回去
这点好像不能用智能指针吧
或者CPtrArray直接存IXMLDOMNodePtr对象。

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧