義和初始化一個用來操作的變量。可以通過使用智能指針
(_com_ptr_t)的構造函數傳遞一個有效的CLSID或者是PROGID,也可以通過_com_ptr_t::CreateInstance()方法來定義對象。具體代碼如下所示:
_ConnectionPtrConn1(__uuidof(Connection));
也可以采用下麵的代碼實現同樣的功能:
_ConnectionPtrConn1=NULL;\/\/定義對象
HRESULThr=S_OK;
\/\/創建實例
hr=Conn1.CreateInstance(__uuidof(Connection));
推薦采用第二種方式,因為用第一種方式不能返回一個失敗的HRESULT,所以也就不能判斷ADO連接對象是成功還是失敗,以及失敗的原因。注意這裡的__uuidof(Connection)中的Connection是在.tlh文件中定義的。通過把它傳遞給方法CreateInstance,就可以創建一個有效的ADOConnection對象。
需要注意的是#import的no_namespace屬性,它告訴編譯器該類在不在一個單獨的名字空間中。使用no_namespace意味著不需要在初始化變量時引用名字空間。當然如果在應用中需要導入多個類型庫時,最好不要使用no_namespace,以免引起名字衝突。
下麵是一個簡單的采用了#import方法的基於ADO應用的示例代碼:
#include
#importrename(“EOF”,“adoEOF”)
voidmain()
HRESULThr=S_OK;
\/\/因為沒有在#import中指定no_namespace,所以必須采用ADODB::這樣的形式來定義變量類型
ADODB::_RecordsetPtrRs1=NULL;
\/\/通過ODBC建立ADO連接
_bstr_tConnect(“DSN=AdoDemo;UID=sa;PWD=;”);
_bstr_tSource(“SELECT*FROMAuthors”);
CoInitialize();
\/\/初始化Rs1對象
hr=Rs1.CreateInstance(__uuidof(ADODB::Recordset));
\/\/省略對返回值hr的判斷
Rs1->Open(Source,
Aonnect,
ADODB::adOpenForwardOnly,
ADODB::adLockReadOnly,
-1);
讓您第一時間享受最新章節,請訪問𝗼𝗼𝗽.𝘁𝘄
\/\/此處可以添加對記錄集Rs1進行操作的代碼
Rs1->Close();
Rs1=NULL;
::MessageBox(NULL,“Success!”,“”,MB_OK);
CoUninitialize();
用MFCOLE創建ADO應用
MFCOLE同樣能夠封裝(wrapper)一個類型庫,但是與#import不同,它不能從類型庫中產生枚舉類型。MFC類CString和COleVariant隱藏了BSTRS和Variants的細節。由MFCOLE產生的類都繼承了類ColeDispatchDriver,由ADO產生的失敗的HRESULTS被封裝在類ColeDispatchException中。
用MFCOLEClassWizard創建ADO應用的步驟如下:
?從Tools菜單中,選擇Options選項中的Directoriestab條目,在ShowDirectories中的LibraryFiles中增加路徑C:\\programfiles\\commonfiles\\system\\ado,設置包含ADO類型庫的路徑。
?從View菜單中,激活ClassWizard,點擊AddClass按鈕並選擇“FromATypeLibrary...”選項,然後在TypeLibrarydialogbox對話框中,從C:\\programfiles\\commonfiles\\system\\ado中選擇文件msado15.dll,在ConfirmClasses對話框中,選擇所有列出的類並按OK按鈕退出ClassWizard。這樣,ClassWizard便生成了兩個文件msado15.h和msado15.cpp。
:碼代例示的用應ODA現實是麵下
象對MOC化始初/\/\
;)(tinIelOxfA
...
象對集據數義定/\/\
;1sRtesdroceR_
;enoitpecxEelOC
;)”;=DWP;as=DIU;omeDodA=NSD“(tcennoCtnairaVelOC
;)”srohtuAMORF*TCELES“(ecruoStnairaVelOC
象對集據數建創/\/\
;)e&,”0.2.tesdroceR.BDODA“(hctapsiDetaerC.1sR
,ecruoS)TNAIRAV((nepO.1sR
,tcennoC)TNAIRAV(
;)1-,1,0
碼代的理處行進1sR集果結對加添以可處此/\/\
;)(esolC.1sR
;)(hctapsiDesaeleR.1sR
;)”!sseccuS“(xoBegasseMxfA
程工ODA建創IPAMOC用
通以可也實其。revirDhctapsiDeloC和t_rtp_moc_自承繼別分們它,類裝封個一了生產象對化動自的定給個一著繞圍都ELOCFM和tropmi#