常見的一些ActiveX大部分是使用VB、Delphi、C++開發,使用C#開發ActiveX要解決下面三個問題:
html
配置:win 7,VS2010
安全
1.建立WinForm控件,命名爲WebForm,如圖1:服務器
2.設置項目的Assembly屬性,如圖2所示,並對Make Assembly Com-Visible選項劃鉤測試
而且設置項目的編譯選項,如圖3所示,對Register for COM Interop選中對COM組件進行註冊。(注意,此處若是實在debug狀態下修改的,那在調到release狀態下還須要再設置一次。)ui
3.打開AssemblyInfo文件添加引用 using System.Security; 而且添加 [assembly: AllowPartiallyTrustedCallers()] 語句url
using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; //note! // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("WebForm")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("WebForm")] [assembly: AssemblyCopyright("Copyright © 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: AllowPartiallyTrustedCallers()] // note!
4.爲控件類建立一個惟一的GUID,注意這裏的GUID不能和AssemblyInf中的GUID相同,生成GUID的方法以下spa
使用Microsoft Windows SDK Tools中的GUID Generator生成新的GUID,如圖debug
COPY生成的GUID到記事本,再拷貝GUID的字符串到控件類,並添加引用 using System.Runtime.InteropServices;3d
using System.Runtime.InteropServices; // note !
namespace WebForm { [Guid("575483BC-7224-44F5-A77C-78AB7FC4E606")] // note! public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } } }
5.ActiveX控件能夠使用VS 2010的安裝項目進行部署,使用VS 2010建立Windows Form的安裝工程就能夠將ActiveX的dll進行打包。在打包時注意將ActiveX控件項目做爲主輸出項目,並設置其Register屬性爲vsdrpCOM,建立打包項目以下圖5所示:code
以後添加項目輸出,以下圖
6.設置項目屬性,以下圖,文件名就是打包後安裝文件.MSI的文件名。設置包文件、壓縮方式,CAB size,這三項均選擇默認值便可。
最後設置安裝URL,這裏的安裝URL是用來發布或者測試ActiveX的URL地址的,咱們設置爲本地url:K:/VSProject/WebForm/Setup/Debug/
7. 將以前的WebForm.dll打包進ActiveX控件。
將WebForm.dll放入包中,以下圖,build solution以後,便會出現Setup.exe和Setup.msi兩個文件,其中Setup.exe就是咱們在使用ActiveX時的codebase文件。
8.測試基於WinForm的ActiveX控件。新建一個htm文件,輸入以下代碼並保存:
其中id爲創建的控件類名,classid爲步驟中生成的Guid,codebase爲本地的ActiveX安裝源,若是作服務器能夠修改成ip源等,這裏暫不贅述。
<object id="UserControl1" classid="clsid:575483BC-7224-44F5-A77C-78AB7FC4E606" width="500" height="500" codebase="K:/VSProject/WebForm/Setup/Debug/Setup.exe"> </object>
如圖,由C#建立的基於WinForm的控件能夠正確的顯示在IE Explorer中
http://www.cnblogs.com/yungboy/archive/2011/01/10/1932433.html
http://homer.cnblogs.com/archive/2005/01/26/97822.aspx
http://www.cnblogs.com/Charles2008/archive/2010/04/11/1709844.html
http://www.cnblogs.com/homer/archive/2005/01/04/86473.html
http://www.cnblogs.com/homer/archive/2005/01/08/88780.html
http://www.cnblogs.com/homer/archive/2005/01/08/88780.html