_ConnectionPtr是什么?类?指针?还是?

wula0010 2012-12-31 05:49:25
ADO编程中:
_ConnectionPtr m_ConnectionPtr;
m_Connection.CreateInstance("ADODB.Connection");
m_Connection->Open((_bstr_t)ConStr,"","",adModeUnknown);
m_Connection->Close();

又是.运算符,又是->,到底这个_ConnectionPtr是什么?
...全文
1514 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liulin2025 2013-01-01
  • 打赏
  • 举报
回复
引用 8 楼 stjay 的回复:
原因之一是为了方便易用 重载->,恰好符合其名字的意义 - 智能“指针” _ConnectionPtr声明 _COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection)); _COM_SMARTPTR_TYPEDEF宏 #define _COM_SMARTPTR_TYPEDEF(Interface, I……
模板类指针才对,纠正一下 _com_ptr
傻X 2013-01-01
  • 打赏
  • 举报
回复
只能指针没东西指的时候会自动销毁
尘中远 2013-01-01
  • 打赏
  • 举报
回复
你就当它是一个类就行了,有指针的功能,还有类的功能,和std::auto_ptr有点像 一般这种点操作是智能指针的功能,如内存管理之类的 是->操作就是封装的指针的功能了,这里就是是数据库具体的方法
stjay 2012-12-31
  • 打赏
  • 举报
回复
引用 8 楼 stjay 的回复:
原因之一是为了方便易用 重载->,恰好符合其名字的意义 - 智能“指针” _ConnectionPtr声明 _COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection)); _COM_SMARTPTR_TYPEDEF宏 #define _COM_SMARTPTR_TYPEDEF(Interface, I……
m_pInterface是private的 m_Connection.m_pInterface->Open只是说明一下
stjay 2012-12-31
  • 打赏
  • 举报
回复
原因之一是为了方便易用 重载->,恰好符合其名字的意义 - 智能“指针” _ConnectionPtr声明 _COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection)); _COM_SMARTPTR_TYPEDEF宏 #define _COM_SMARTPTR_TYPEDEF(Interface, IID) typedef _com_ptr_t<Interface> Interface ## Ptr; 类_com_ptr_t的运算符->重载 Interface* operator->() const { if (m_pInterface == NULL) { _com_issue_error(E_POINTER); } return m_pInterface; } 如
m_Connection->Open((_bstr_t)ConStr,"","",adModeUnknown);
相当于
m_Connection.m_pInterface->Open((_bstr_t)ConStr,"","",adModeUnknown);
wula0010 2012-12-31
  • 打赏
  • 举报
回复
引用 6 楼 stjay 的回复:
_ConnectionPtr是一个类 ->是重载符,为了_ConnectionPtr使用起来像指针
既然是个类,为什么要用起来象指针?就当类来使用不是很好????
stjay 2012-12-31
  • 打赏
  • 举报
回复
_ConnectionPtr是一个类 ->是重载符,为了_ConnectionPtr使用起来像指针
九州剑王 2012-12-31
  • 打赏
  • 举报
回复
我前几天也看到了,没去多想,这东西仅仅是用用罢了
wula0010 2012-12-31
  • 打赏
  • 举报
回复
刚百度了下,_ConnectionPtr是Connection对应的智能指针,为什么叫智能指针?和一般的指针有什么区别? 既然是指针,应该是调用Connection对象的CreateInstance方法,为什么不用"->",而要用"."?
wula0010 2012-12-31
  • 打赏
  • 举报
回复
感觉 vc++ 好乱.....
wula0010 2012-12-31
  • 打赏
  • 举报
回复
引用 1 楼 hfz8867879 的回复:
只有Ctrate这里是.
那这个算指针?为什么create要用"." ?
九州剑王 2012-12-31
  • 打赏
  • 举报
回复
只有Ctrate这里是.
我花钱买的,结果没用上,太亏了 本系统采用ADO来访问SQL数据库,这里充分应用了C++封装的功能,根据本系统应用的范围,将访问数据库的功能函数封装在一个CMyDatabase。 正如前所述,ADO是访问数据库的一个方法,它提供了不同的接口。ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。 _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtrconnection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口 ,然后使用_RecordsetPtr执行存储过程和SQL语句。  根据这些,我们将数据库的各种操作封装到CMyDatabase里。几个主要函数说明如下:

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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