如何用_RecordsetPtr地址还原为_RecordsetPtr,得到结果集

natfit 2011-07-11 10:58:43
我有一个结果集指针_RecordsetPtr,怎样把其地址取出来,再在另外一个方法里还原为_RecordsetPtr?


我测试了一下:(ehouse的值是一直在的,没有失效)

_RecordsetPtr ePHouse=dData::getTableDataR(hfzxEnum::Phouse,sqlArray);  //取结果集

1 LPVOID addr=(LPVOID)ePHouse;
2 LPVOID addr=ePHouse;
3 LPVOID addr=&ePHouse;


4 _RecordsetPtr *old=(_RecordsetPtr *)addr;

5 //_RecordsetPtr old=(_RecordsetPtr)addr;

6 //_RecordsetPtr *old=(_RecordsetPtr)addr;


其中语句5、6编译出错,只有4成功

语句1和2 效果一样,

>? ePHouse
{0x026b1108}
m_pInterface: 0x026b1108   这个是原始数据位置吧?
>? addr
0x026b1108
>? old
0x026b1108 {0x4dd14cf0}
m_pInterface: 0x4dd14cf0
>? *old
{0x4dd14cf0}
m_pInterface: 0x4dd14cf0

可以看到m_pInterface不一致


语句3地址都不一样
>? addr
0x025ccc3c
>? old
0x025ccc3c {0x00000000}
m_pInterface: 0x00000000
更是出错,而且在3执行后,ePHouse变为0000000


各位高手帮忙
...全文
69 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyq5945 2011-07-11
  • 打赏
  • 举报
回复
引用计数到0的时候肯定销毁了。
这个时候访问的应该是野指针获取的垃圾数据,就像是声明个变量,没有赋初值读出来的数据是一样的。
natfit 2011-07-11
  • 打赏
  • 举报
回复
我只要求能从其中取到一部分数据
natfit 2011-07-11
  • 打赏
  • 举报
回复
但是数据始终是没有销毁的

难道也恢复不出来?
zyq5945 2011-07-11
  • 打赏
  • 举报
回复
_RecordsetPtr是带引用计数的智能指针,超出它的作用域的话就引用计数就会减1,引用计数到0的时候就销毁,所以只能用个全局的_RecordsetPtr来保存。
natfit 2011-07-11
  • 打赏
  • 举报
回复
搞定了,不能用LPVOID addr=(LPVOID)ePHouse;

用LPVOID addr=(IUnknown *)ePHouse;

恢复时用
_RecordsetPtr esou=(_RecordsetPtr)(IUnknown *)tw.sAddr;

就可以了

多谢各位!

4,011

社区成员

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

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