選自「紅馬天下」的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.如圖 下一步,我們改動專案屬性,將引導程式更改為...