📄 subject_65007.htm
字号:
<p>
序号:65007 发表者:vc60 发表日期:2003-12-15 09:18:34
<br>主题:请高手帮忙,急谢!!!!!
<br>内容:我正在看《Visual C++实践与提高--数据库篇》的第五章的一个例子,在305页有一段代码如下:<BR>BOOL CMyOleDBSmplApp::ShowDataLink(_bstr_t *bstr_Connect)<BR>{<BR> HRESULT hr;<BR> //typedef _com_ptr_t<class _com_IIID<class IDataSourceLocator,NULL>> IDataSourceLocatorPtr;//什么意识???<BR><BR> oledb::IDataSourceLocatorPtr//什么意思???// p_IDSL=NULL;//数据链接属性对话框对象<BR> _ConnectionPtr//什么意思???// p_conn=NULL;//存储属性对话框对象指针<BR> BOOL b_ConnValid=FALSE;<BR><BR> try<BR> {<BR> //创建一个数据源定位器接口(IDataSourceLocator)的实例<BR> hr=p_IDSL.CreateInstance(_uuidof(oledb::DataLinks));<BR> TESTHR(hr);//检查错误<BR><BR> //如果bstr_Connect是一个空串,则创建一个新的链接<BR> if(*bstr_Connect==_bstr_t(""))<BR> {<BR> p_conn=p_IDSL->PromptNew();<BR> if(p_conn!=NULL)b_ConnValid=TRUE;<BR> }<BR> else<BR> {<BR> p_conn.CreateInstance("ADODB.Connection");<BR> p_conn->ConnectionString=*bstr_Connect;<BR><BR> //当我们想要对连接对话矿进行编辑时,需要通过IDispatch接口传递链接参数<BR> //给IDataSourceLocator.因此,我们需要想查询到指向IDispatch接口的指针<BR><BR> IDispatch *p_Dispatch=NULL;<BR> p_conn.QueryInterface(IID_IDispatch,(LPVOID *) &p_Dispatch);<BR><BR> if(p_IDSL->PromptEdit(&p_Dispatch))<BR> b_ConnValid=TRUE;<BR> p_Dispatch->Release();<BR> }<BR> if(b_ConnValid)<BR> *bstr_Connect=p_conn->ConnectionString;<BR> }<BR> catch(_com_error)<BR> {<BR> //错误处理<BR> return FALSE;<BR> }<BR> return b_ConnValid;<BR><BR>}<BR>以上在//什么意思???//之前的内容请大虾帮忙解答一下,在下已经折腾了四天了,不胜感激,我的电邮:hebei-ly@163.net
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:michael 回复日期:2003-12-15 09:45:02
<br>内容:"//"是C++的标准注释符。<BR>就是说"//"以后的内容(仅本行)不作为程序的语句进行编译。一般用来解释前面语句的作用。<BR>typedef _com_ptr_t<class _com_IIID<class IDataSourceLocator,NULL>> IDataSourceLocatorPtr;<BR><BR>_com_ptr_t是一种指针模板。该语句定义了一种指向固定接口的智能指针:IDataSourceLocatorPtr。该指针指向的接口是:IDataSourceLocator。<BR>这是COM的内容。<BR>_ConnectionPtr是指向连接对象的智能指针。<BR><BR>hr=p_IDSL.CreateInstance(_uuidof(oledb::DataLinks));<BR>本句创建了oledb::DataLinks一个对象的实例。<BR><BR> p_conn.CreateInstance("ADODB.Connection");<BR> p_conn->ConnectionString=*bstr_Connect;<BR>这两句是创建了一个ADO连接对象的实例,并给该连接对象传递连接字符串,<BR>就是那个指定连接数据库、用户名、密码等连接属性的字符串。<BR>IDispatch *p_Dispatch=NULL;<BR> p_conn.QueryInterface(IID_IDispatch,(LPVOID *) &p_Dispatch);<BR>这两句声明了一个自动化接口,并使用ADO连接对象的QueryInterface把该对象的自动化接口查出来。<BR>try………………catch………………<BR>是面向对象语言支持的标准特性,叫做异常处理。<BR>用来处理那些可以预见的意外,比如数据库连接,一般来说执行状态是连接成功,但是也有不成功的可能,当这种情况发生时,系统会抛出一个异常然后被catch捕获,并执行catch里面的语句。这对程序的健壮性很有好处。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:vc60 回复日期:2003-12-15 14:47:37
<br>内容:能详细的解释一下下面语句的意思吗?<BR>typedef _com_ptr_t<class _com_IIID<class IDataSourceLocator,NULL>> IDataSourceLocatorPtr<BR>尤其是嵌套的"<"中的内容的意思。谢谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -