返回> 网站首页 

_RecordsetPtr中不能使用参数值传递也不能作为返回值

yoours2012-06-30 23:17:01 阅读 1423

简介一边听听音乐,一边写写文章。

        _RecordsetPtr为记录集,在VC连接数据库中经常用到。在建模的过程,肯定很多朋友想为其做一个接口层。实践过程中,总发现编译通过了,执行时总是出错,第一个想到的当然是VC中最强大的错误——指针错误了。究竟是指针指错了,还是值无法返回呢?
        _RecordsetPtr这个类一直很神秘,其实从名字可以看出_RecordsetPtr=_Recordset*。那么,问题来了,例如一个需要返回值的参数void test(_RecordsetPtr *p);如何能正确返回呢?如果调用采用test(&P),会立刻报错……参数返回,返回值返回,类型转换都尝试过,无一成功。
       其症结在于函数在打开_RecordsetPtr记录集时,系统会自动创建数据集保存数据库发送过来的数据。而不要忘记,_RecordsetPtr只是一个指针,其真正存放数据的结构体是在函数中自动创建。也就是说,当函数调结束后,这个结构体所在的内存会随着释放。即使指针还是指导那里,但数据已经不存在了。当程序企图从这里读取数据时,就会产生异常。
       所以,_RecordsetPtr结构体是不能直接传递到函数外面的。而是需要在函数内部新建一个堆空间,然后把_RecordsetPtr指向的结构体的数据复制到这里来,再返回该地址指针。那么,这个结构体的记录集才能正确返回到函数外面。
微信小程序扫码登陆

文章评论

1423人参与,0条评论