C#開發ActiveX控件並應用於網頁

在C#中相對應的是COM組件,編譯後是dll而不是ocx。所以在C#中,在創建項目時只能創建類庫項目。

下面我教大家如何一步一步來實現。

  • 以管理員的身份啓動VS,我的是VS2015。新建類庫DevControlColl,框架選擇2.0即可。

這裏寫圖片描述

  • 環境配置(勾選一下兩個選項)

這裏寫圖片描述

這裏寫圖片描述

  • 對AssemblyInfo.cs進行編輯,修改相應的屬性
    // 將false更改爲true,自動生成的註釋也做了說明
    [assembly: ComVisible(true)]  
    //新添加下面的屬性。該屬性要求引用System.Security 
    [assembly: AllowPartiallyTrustedCallers()] 
    // 如果此項目向 COM 公開,則下列 GUID 用於類型庫的 ID 
    //[assembly: Guid("92eb428e-1894-4ca2-8e88-20fd0bb15ee5")]  //註釋掉該屬性
    要引用:using System.Runtime.InteropServices; 
  • 定義IObjectSafety接口(無需修改,GUID不可修改)
    [Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IObjectSafety
    {  
        void GetInterfacceSafyOptions(System.Int32 riid, out System.Int32 pdwSupportedOptions, out System.Int32 pdwEnabledOptions);
        void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions);
    }
  • 爲將發佈控件設置GUID碼
    [Guid("92eb428e-1894-4ca2-8e88-20fd0bb15ee5")]
    public partial class TreeList : UserControl, IObjectSafety

    // 實現如下
    public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
    {
        pdwSupportedOptions = 1;  //不要修改該代碼
        pdwEnabledOptions = 2;    //不要修改該代碼
        return;
    }

    public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
    {
        return;
    }

設計的空間UI如下:

這裏寫圖片描述

  • 註冊DevControlColl.dll

.NET自帶的註冊工具RrgAsm.exe工具,而且使用的註冊工具版本一定要與開發框架版本一起發佈的版本。

我寫了兩個簡單的批處理。

註冊:
cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
RegAsm.exe G:\MyCode\comocx\DevControlColl\DevControlColl\bin\Debug\DevControlColl.dll
pause
註銷:
cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
RegAsm.exe /u G:\MyCode\comocx\DevControlColl\DevControlColl\bin\Debug\DevControlColl.dll
pause

  • 做一個簡單網頁,將註冊的空間嵌入。
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div style="margin:100px auto;border:1px solid #000;width:500px;height:500px;">
        <OBJECT ID="treeList" CLASSID="CLSID:92eb428e-1894-4ca2-8e88-20fd0bb15ee5"></OBJECT>
    </div>
</body>
</html>

核心嵌入代碼:

<OBJECT ID="treeList" CLASSID="CLSID:92eb428e-1894-4ca2-8e88-20fd0bb15ee5">

“92eb428e-1894-4ca2-8e88-20fd0bb15ee5”就是最開始的那個GUID碼。

嵌入效果如下:

這裏寫圖片描述

大功告成了。這只是開始,希望能給大家帶來幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章