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.Security;


定义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码。

嵌入效果如下:

 

 

 

大功告成了。这只是开始,希望能给大家带来帮助。
————————————————
版权声明:本文为CSDN博主「千杯不醉-sen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yang_sen_/java/article/details/62043429

posted @ 2020-06-17 11:01  吴土炮Jared  阅读(306)  评论(0编辑  收藏  举报