在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碼。
嵌入效果如下:
大功告成了。這只是開始,希望能給大家帶來幫助。