⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_65007.htm

📁 vc
💻 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>&nbsp;&nbsp;&nbsp;&nbsp;HRESULT hr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//typedef _com_ptr_t&lt;class _com_IIID&lt;class IDataSourceLocator,NULL&gt;&gt; IDataSourceLocatorPtr;//什么意识???<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;oledb::IDataSourceLocatorPtr//什么意思???// p_IDSL=NULL;//数据链接属性对话框对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;_ConnectionPtr//什么意思???// p_conn=NULL;//存储属性对话框对象指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL b_ConnValid=FALSE;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//创建一个数据源定位器接口(IDataSourceLocator)的实例<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hr=p_IDSL.CreateInstance(_uuidof(oledb::DataLinks));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TESTHR(hr);//检查错误<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果bstr_Connect是一个空串,则创建一个新的链接<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(*bstr_Connect==_bstr_t(&#34;&#34;))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_conn=p_IDSL-&gt;PromptNew();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(p_conn!=NULL)b_ConnValid=TRUE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_conn.CreateInstance(&#34;ADODB.Connection&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_conn-&gt;ConnectionString=*bstr_Connect;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当我们想要对连接对话矿进行编辑时,需要通过IDispatch接口传递链接参数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//给IDataSourceLocator.因此,我们需要想查询到指向IDispatch接口的指针<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDispatch *p_Dispatch=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_conn.QueryInterface(IID_IDispatch,(LPVOID *) &amp;p_Dispatch);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(p_IDSL-&gt;PromptEdit(&amp;p_Dispatch))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_ConnValid=TRUE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_Dispatch-&gt;Release();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(b_ConnValid)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*bstr_Connect=p_conn-&gt;ConnectionString;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;catch(_com_error)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//错误处理<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;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>内容:&#34;//&#34;是C++的标准注释符。<BR>就是说&#34;//&#34;以后的内容(仅本行)不作为程序的语句进行编译。一般用来解释前面语句的作用。<BR>typedef _com_ptr_t&lt;class _com_IIID&lt;class IDataSourceLocator,NULL&gt;&gt; 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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_conn.CreateInstance(&#34;ADODB.Connection&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_conn-&gt;ConnectionString=*bstr_Connect;<BR>这两句是创建了一个ADO连接对象的实例,并给该连接对象传递连接字符串,<BR>就是那个指定连接数据库、用户名、密码等连接属性的字符串。<BR>IDispatch *p_Dispatch=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p_conn.QueryInterface(IID_IDispatch,(LPVOID *) &amp;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&lt;class _com_IIID&lt;class IDataSourceLocator,NULL&gt;&gt; IDataSourceLocatorPtr<BR>尤其是嵌套的&#34;&lt;&#34;中的内容的意思。谢谢!
<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 + -