c#制作ActiveX控件
1、新建一个项目,选window->类库(这里选控件库也是可以的)
2、点击项目,右键属性
3、在应用程序->程序集信息,勾选里面的“使程序集com可见”
4、然后在生成->勾选“为com互操作注册”然后重新生成解决方案
5、在AssemblyInfo.cs类里面添加一下内容
6、然后添加接口IObjectSafety.cs,这里的名字不要改它
7、接口里面的内容如下,特别注意的是这里面的gu坡纠课柩id 不能更改,只要将下面的代码复制到接口里面去就可以了[ComImport,GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")][InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]interfaceIObjectSafety{[PreserveSig]intGetInterfaceSafetyOptions(refGuidriid,[MarshalAs(UnmanagedType.U4)]refintpdwSupportedOptions,[MarshalAs(UnmanagedType.U4)]refintpdwEnabledOptions);[PreserveSig()]intSetInterfaceSafetyOptions(refGuidriid,[MarshalAs(UnmanagedType.U4)]intdwOptionSetMask,[MarshalAs(UnmanagedType.U4)]intdwEnabledOptions);}
8、添加用户控件,然后在里面拉一个label控件,textbox控件,button控件,然后给button1添加一个点击事件priv锾攒揉敫atevoidbutton1_Click(objectsender,EventArgse){ label1.Text=textBox1.Text;}
9、这里是生成guid,工具->创建guid,点击右边的复制就可以了
10、将刚才生成的guid添加到用户控件上面去,并且让用户控件继承接口IObjectSafety,并且在用户控件里面实现接口IObjectSafety,将下面的复制粘贴就可以劲忧商偌了#regionIObjectSafety成员privateconststring_IID_IDispatch="{00020400-0000-0000-C000-000000000046}";privateconststring_IID_IDispatchEx="{a6ef9860-c720-11d0-9337-00a0c90dcaa9}";privateconststring_IID_IPersistStorage="{0000010A-0000-0000-C000-000000000046}";privateconststring_IID_IPersistStream="{00000109-0000-0000-C000-000000000046}";privateconststring_IID_IPersistPropertyBag="{37D84F60-42CB-11CE-8135-00AA004BB851}";privateconstintINTERFACESAFE_FOR_UNTRUSTED_CALLER=0x00000001;privateconstintINTERFACESAFE_FOR_UNTRUSTED_DATA=0x00000002;privateconstintS_OK=0;privateconstintE_FAIL=unchecked((int)0x80004005);privateconstintE_NOINTERFACE=unchecked((int)0x80004002);privatebool_fSafeForScripting=true;privatebool_fSafeForInitializing=true;publicintGetInterfaceSafetyOptions(refGuidriid,refintpdwSupportedOptions,refintpdwEnabledOptions){intRslt=E_FAIL;stringstrGUID=riid.ToString("B");pdwSupportedOptions=INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA;switch(strGUID){case_IID_IDispatch:case_IID_IDispatchEx:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForScripting==true)pdwEnabledOptions=INTERFACESAFE_FOR_UNTRUSTED_CALLER;break;case_IID_IPersistStorage:case_IID_IPersistStream:case_IID_IPersistPropertyBag:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForInitializing==true)pdwEnabledOptions=INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt=E_NOINTERFACE;break;}returnRslt;}publicintSetInterfaceSafetyOptions(refGuidriid,intdwOptionSetMask,intdwEnabledOptions){intRslt=E_FAIL;stringstrGUID=riid.ToString("B");switch(strGUID){case_IID_IDispatch:case_IID_IDispatchEx:if(((dwEnabledOptions&dwOptionSetMask)==INTERFACESAFE_FOR_UNTRUSTED_CALLER)&&(_fSafeForScripting==true))Rslt=S_OK;break;case_IID_IPersistStorage:case_IID_IPersistStream:case_IID_IPersistPropertyBag:if(((dwEnabledOptions&dwOptionSetMask)==INTERFACESAFE_FOR_UNTRUSTED_DATA)&&(_fSafeForInitializing==true))Rslt=S_OK;break;default:Rslt=E_NOINTERFACE;break;}returnRslt;}#endregion
11、然后添加一个安装部署项目,然后添加项目输出,将刚刚的项目选上就可以了
12、然后右键部署项目,生成之后在项目下的debug文件夹下有两个文件分别为exe和msi文件,双击msi文件按照安装步骤安装。
13、然后在解决方案里面再添加一个项目。主要是用来测试的,这里我选择的页面来测试,然后在Default.aspx里面添加一个obje艘早祓胂ct,里面的classid为刚刚给用户控件添加的guid,一定要相同的,不然的话 系统找不到你制作的控件,然后将项目设为启动项目,运行就可以了