一、理論基礎:
建立com元件有如下兩種方式。
1。在開發過程中,客戶程式通常都是通過cocreateinstance()建立com物件,但這樣建立方式,客戶必須知道該com元件的clsid或progid。com庫通過id在登錄檔中找到com,並載入。通過指標陣列呼叫其內的函式。
2。另一種建立方式,就是通過名字物件(moniker)建立com物件。名字技術允許客戶程式通過符號化的方式建立com物件,不必須再通過clsid或progid,大大降低了系統的偶合性。
下面對第二種方式進行簡單說明:
名字物件,其本身也是乙個com物件,它對通常的com元件物件提供了符號化的表示方法,同時它對com元件物件進行了全面的封裝。客戶只需建立相應的名字物件,然後利用名字物件的繫結功能得到元件物件。名字物件實現了標準的介面imoniker,客戶程式通過imoniker介面獲得元件物件。
例如在客戶文件中插入乙個電子**檔案:「c:/my document / my.xls」,其處理過程如下:
1。客戶程式首先呼叫createfilemoniker api 函式建立乙個檔案名字物件,
2。呼叫名字物件的imoniker::bindtoobject()函式,繫結到excle.exe,在後台執行,並載入"c:/my document / my.xls",其繫結的詳細過程如下:
2。1通過getclassfile找到與該電子**檔案相聯絡的元件物件clsid
2。1。1clsid一般儲存在檔案中,直接從檔案讀取即可
2。1。2clsid,也通過該電子**檔案的副檔名「。xls」,到登錄檔中查詢相應的clsid
2。2找到clsid,後再呼叫cocreateinstance()元件物件
2。3請求元件的ipersistfile指標,然後呼叫ipersistfile::load(strfilename)載入電子**檔案。
2。4bindtoobject返回
二、在mfc中的實際
應用在mfc中,利用coleclientitem類,將其載入過程封裝掩蓋起來了。所以,即使你不懂名字物件技術,也不會影響你使用ole物件。
cview::oninsertobject()
coleinsertdialog dlg ; //啟動ole插入對話方塊
if (dlg.domodal() != idok)
return;
beginwaitcursor();
colecntritem* pitem = null;
try{
// create new item connected to this document.
coledoc* pdoc = getdocument();//獲得容器指標
assert_valid(pdoc);
pitem = new colecntritem(pdoc);//建立ole物件
assert_valid(pitem);
// initialize the item from the dialog data.
if (!dlg.createitem(pitem)) //裝載所嵌入的文件
afxthrowmemoryexception(); // any exception will do
assert_valid(pitem);
if (dlg.getselectiontype() == coleinsertdialog::createnewitem)
pitem->doverb(oleiverb_show, this);//啟用
略。。。。
C 操作Access的Ole物件
ole物件資料型別 1 ole 物件用於使用 ole 協議在其他程式中建立的 ole 物件,如 microsoft word 文件 microsoft excel 電子 聲音或其他二進位制資料。2 access中的ole物件對應到c 中的資料型別是二進位制的byte陣列,對應到oledbtype.b...
有關vim的使用
重點內容 vi編輯器有三種模式 命令模式,編輯模式,末行模式 開啟vi後首先是命令模式,用i,o,a等進入編輯模式,按esc退出編輯模式。w 儲存檔案但不退出vi w file 將修改另外儲存到file中,不退出vi w 強制儲存,不推出vi wq 儲存檔案並退出vi wq 強制儲存檔案,並退出vi...
有關sqlmap的使用
首先貼一段詳細引數說明,相當於說明書了 sqlmap詳細命令 options 選項 target 目標 以下至少需要設定其中乙個選項,設定目標url。request 請求 這些選項可以用來指定如何連線到目標url。enumeration 列舉 這些選項可以用來列舉後端資料庫管理系統的資訊 表中的結構...