用C 編寫ActiveX控制項

2021-03-31 08:57:00 字數 3820 閱讀 4781

選自「紅馬天下」的blog,做了適當修改將上下兩章合併(http://.**blogs.***/homer/)

前些日子做乙個web專案,必須自己編寫乙個activex控制項。如今的activex控制項大多是使用vb/c++來開發的,而我對他們並不熟悉,因此考慮使用熟悉的c#編寫activex控制項。

首先,建立乙個winform控制項專案helloworld,並拖入乙個label控制項,文字設為helloworld,如圖:

using

system;

using

system.collections;

using

system.***ponentmodel;

using

system.drawing;

using

system.data;

using

system.windows.forms;

namespace

helloworld

此時編譯專案,可以生成helloworld.dll。將此dll拷貝到iis的虛擬根目錄下,然後建立乙個helloworld.htm的檔案,html**如下:

,出現介面:

[assembly : allowpartiallytrustedcallers()]

現在重新編譯,並且替換以前的dll,介面又可以顯示出來了。

需要提醒的是,到現在為止,我們編寫的還不是真正的activex控制項。這個控制項到現在為止,還只是能夠實現自身的顯示,並且不能實現更多的功能,比如實現與指令碼的互動或者操作客戶端的登錄檔或者磁碟。這是由於.*** framework的安全模型所限制的。如果我們希望這個控制項突破.*** framework安全模型的限制,實現與指令碼的互動或者操作客戶端的登錄檔或者磁碟的話,必須要讓它成為真正的activex控制項。下面,我們把剛才的控制項變成真正的activex控制項。

首先使用 工具—〉建立guid 生成乙個guid,並修改usercontrol1.cs檔案。首先增加引用system.runtime.interopservices命名空間,並在demo前面加入一條語句:

<

body 

bgcolor

='#223344'>

="helloworld"

classid

="clsid:9551b223-6188-4387-b293-c7d9d8173e3a"

width

="184"

height

="96"

>

object

>

body

>

使用ie檢視,我們的控制項又可以在網頁中顯示了。不過,這個時候它已經不再是以前的.*** winform控制項了,而是貨真價實的activex控制項了。

不過,編寫activex控制項的任務還沒有完成。我們還沒有實現指令碼互動或者讀寫i/o,也沒有實現activex控制項的自動分發。首先,我們先嘗試實現和js的互動能力。

我們在demo中加入showmessage方法: 

public

void

showmessage(

string

msg)

我們重新編譯。在重新訪問頁面之前,我們先來修改html**: 

<

body 

bgcolor

='#223344'>

="helloworld"

classid

="clsid:9551b223-6188-4387-b293-c7d9d8173e3a"

width

="184"

height

="96"

>

object

>

<

br>

<

input 

type

='button' 

onclick

='helloworld.showmessage(「hello 

world!」)' value

='click'>

>

現在,重新訪問

,單擊click按鈕,應該可以實現互動了。

但是結果卻很遺憾,我們發現ie跳出了對話方塊,如圖所示: 

public

void

showmessage(

string

msg)

我們重新編譯。在重新訪問頁面之前,我們先來修改html**: 

<

body 

bgcolor

='#223344'>

="helloworld"

classid

="clsid:9551b223-6188-4387-b293-c7d9d8173e3a"

width

="184"

height

="96"

>

object

>

<

br>

<

input 

type

='button' 

onclick

='helloworld.showmessage(「hello 

world!」)' value

='click'>

>

現在,重新訪問

,單擊click按鈕,應該可以實現互動了。

但是結果卻很遺憾,我們發現ie跳出了對話方塊,如圖所示: 

[guid(

"cb5bdc81-93c1-11cf-8f20-00805f2cd064

"),inte***cetype(***inte***cetype.inte***ceisiunknown)]

public

inte***ce

iobjectsafety

注意,這個guid是不能改的。然後,我們在demo類裡面實現這個介面。增加一下**: 

重新編譯,然後將ie裡面的設定改回來。現在,我們發現,和js的互動已經沒有問題了。

這樣,乙個最基本的activex控制項已經寫好了。你可以在這個控制項的基礎上增加任何你需要的功能。到這裡,編寫控制項的任務已經完成了,我們的下乙個目標就是發布它。

[guid(

"cb5bdc81-93c1-11cf-8f20-00805f2cd064

"),inte***cetype(***inte***cetype.inte***ceisiunknown)]

public

inte***ce

iobjectsafety

注意,這個guid是不能改的。然後,我們在demo類裡面實現這個介面。增加一下**: 

重新編譯,然後將ie裡面的設定改回來。現在,我們發現,和js的互動已經沒有問題了。

這樣,乙個最基本的activex控制項已經寫好了。你可以在這個控制項的基礎上增加任何你需要的功能。到這裡,編寫控制項的任務已經完成了,我們的下乙個目標就是發布它。

用C 編寫ActiveX控制項(三)

在前面我們已經完成了activex控制項的開發,接下來的就是發布它了。首先,我們建立乙個windows安裝專案,並將activex控制項的主輸出新增到專案輸出中。然後,改動activex控制項的主輸出檔案,將其register屬性改為vsdrpcom.如圖 下一步,我們改動專案屬性,將引導程式更改為...

用C 編寫ActiveX控制項(三)

在前面我們已經完成了activex控制項的開發,接下來的就是發布它了。首先,我們建立乙個windows安裝專案,並將activex控制項的主輸出新增到專案輸出中。然後,改動activex控制項的主輸出檔案,將其register屬性改為vsdrpcom.如圖 下一步,我們改動專案屬性,將引導程式更改為...

用C 編寫ActiveX控制項(三)

在前面我們已經完成了activex控制項的開發,接下來的就是發布它了。首先,我們建立乙個windows安裝專案,並將activex控制項的主輸出新增到專案輸出中。然後,改動activex控制項的主輸出檔案,將其register屬性改為vsdrpcom.如圖 下一步,我們改動專案屬性,將引導程式更改為...