C 呼叫ActiveX控制項

2021-05-23 18:05:16 字數 2606 閱讀 2327

背景:最近專案中需要用到activex控制項,專案是在.net平台下開發的。因此就直接在專案中新增了對activex控制項的引用,新增引用成功。在**中例項化類的例項也沒有問題,但在呼叫其方法或屬性時總是丟擲"未處理 comexception"異常。

方法一:

1、在系統中註冊該ocx控制項,命令:regsvr32.exe 控制項位置(加 /u 引數是取消註冊);

2、在.net的工具箱中新增該控制項,拖到form中去就可以了。

方法二:

1、用aximp.exe來包裝一下ocx控制項的類;

2、在程式中引用生成的dll就可以了。

區別:1、方法一不需要手動包裝ocx控制項,方法二需要;

2、方法一需要將控制項先新增到工具箱,方法二不需要。

windows 窗體 activex 控制項匯入程式 (aximp.exe)

activex 控制項匯入程式將 activex 控制項的 com 型別庫中的型別定義轉換為 windows 窗體控制項。

windows 窗體只能承載 windows 窗體控制項,即從 control 派生的類。aximp.exe 生成可承載於 windows 窗體上的 activex 控制項的包裝類。這使您得以使用可應用於其他 windows 窗體控制項的同一設計時支援和程式設計方**。

若要承載 activex 控制項,必須生成從 axhost 派生的包裝控制項。此包裝控制項包含基礎 activex 控制項的乙個例項。它知道如何與 activex 控制項通訊,但它顯示為 windows 窗體控制項。這個生成的控制項承載 activex 控制項並將其屬性、方法和事件公開為生成控制項的屬性、方法和事件。

aximp [options]

備註

引數:說明 

file:包含要轉換的 activex 控制項的源檔名。檔案引數中必須有副檔名 .dll 或 ocx。

選項:說明

/delaysign:

指定 aximp.exe 用延遲的簽名操作對結果控制項進行簽名。此選項必須與 /keycontainer:、/keyfile: 或 /publickey: 選項一起指定。有關延遲的簽名過程的更多資訊,請參見延遲為程式集簽名。

/help :

顯示該工具的命令語法和選項。

/keycontainer: containername:

使用在 containername 所指定的金鑰容器中找到的公鑰/私鑰對,用強名稱對結果控制項進行簽名。

/keyfile: filename:

使用在 filename 中找到的發行者的正式公鑰/私鑰對,用強名稱對結果控制項進行簽名。

/nologo:

取消顯示 microsoft 啟動標題。

/out: filename:

指定要建立的程式集的名稱。

/publickey: filename:

使用在 filename 所指定的檔案中找到的公鑰,用強名稱對結果控制項進行簽名。

/silent:

取消顯示成功訊息。

/source:

生成 windows 窗體包裝的 c# 源**。

/verbose:

指定詳細模式;顯示附加的進度資訊。

/? :

顯示該工具的命令語法和選項。

aximp.exe 一次轉換整個 activex 控制項型別庫,並產生一組程式集,這些程式集包含在原始型別庫中定義的型別的公共語言執行庫元資料和控制項實現。生成的檔案按照下面的模式命名:

com 型別的公共語言執行庫**:progid.dll

activex 控制項的 windows 窗體**(其中 ax 表示 activex):axprogid.dll

注意

如果 activex 控制項的成員名稱與 .net framework 中定義的名稱匹配,則 aximp.exe 在建立 axhost 派生類時,將在成員名稱前加上字首「ctl」。例如,假設 activex 控制項有乙個名為「layout」的成員,由於在 .net framework 中定義了 layout 事件,因此該成員在 axhost 派生類中將重新命名為「ctllayout」。

可以使用 msil 反匯程式設計序 (ildasm.exe) 這樣的工具檢查這些生成的檔案。

注意,在 activex 控制項 shdocvw.dll 上執行 aximp.exe 將總是在執行該工具的目錄中建立另乙個名為 shdocvw.dll 的檔案。如果將此生成檔案放在「documents and settings」目錄下,則會導致 microsoft internet explorer 和 windows 資源管理器出現問題。重啟計算機時,windows 在檢視 system32 目錄之前首先檢視「documents and settings」目錄,以查詢 shdocvw.dll 的副本。它將使用在「documents and settings」目錄中找到的副本,並嘗試載入託管的包裝。由於 internet explorer 和 windows 資源管理器依賴於 system32 目錄中的 shdocvw.dll 版本中的呈現引擎,因此它們將無法正常工作。如果出現此問題,請在「documents and settings」目錄中刪除 shdocvw.dll 的副本,然後重啟計算機。

aximp c:/systemroot/system32/msdxm.ocx

C 中對ActiveX控制項的呼叫

一 不生成具有強名稱的程式集 1.使用下面這兩個命令將com控制項轉換成.net程式集 aximp c windows system shdocvw.dll tlbimp mshtml.tlb aximp將產生兩個檔案 axshdocvw.dll and shdocvw.dll.tlbimp將產生m...

C 整合ActiveX控制項

問題描述 最近專案中需要用到activex控制項,專案是在.net平台下開發的。因此就直接在專案中新增了對activex控制項的引用,新增引用成功。在 中例項化類的例項也沒有問題,但在呼叫其方法或屬性時總是丟擲 未處理 comexception 異常。解決方法,按照以下步驟 1.註冊activex控...

ActiveX控制項

1.概念 activex控制項等價於以前的ole控制項或ocx。乙個典型的控制項包括設計時和運 行時的使用者介面,唯一的idispatch介面定義控制項的方法和屬性,唯一的 iconnectionpoint介面用於控制項可引發的事件。2.控制項框架 圖 1其中,dclock和 dclockevent...