.net中Activex开发的几点

开发要点:

1.在AssemblyInfo.cs添加以下两行

[assembly: AllowPartiallyTrustedCallers()]
[assembly: ComVisible(true)]

 

2. 为你的Activex类添加Guid标签,如果有方法或者属性需要被js调用,那么该方法或者属性应该添加[ComVisible(true)].

3. 一旦有方法要与JS交互,则需要实现IObjectSafety接口。

首先得添加这个接口的定义

//
// MS IObjectSafety Interface definition
//
[ComImport, Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")] //这个GUID不能变
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
    [PreserveSig]
    void GetInterfacceSafyOptions(
        int riid,
        out int pdwSupportedOptions,
        out int pdwEnabledOptions);

    [PreserveSig]
    void SetInterfaceSafetyOptions(
        int riid,
        int dwOptionsSetMask,
        int dwEnabledOptions);
}

 

然后再在你的activex类中实现这个接口。

一个示例代码如下:

[ComImport, Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
  [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  public interface IObjectSafety
  {
      [PreserveSig]
      void GetInterfacceSafyOptions(
          int riid,
          out int pdwSupportedOptions,
          out int pdwEnabledOptions);

      [PreserveSig]
      void SetInterfaceSafetyOptions(
          int riid,
          int dwOptionsSetMask,
          int dwEnabledOptions);
  }

[Guid("449D8AB3-7F71-4cdf-B506-65D0836C3170")]
   public partial class Browser : UserControl, IObjectSafety

{

//…..

 

#region IObjectSafety Members
  public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
  {
      pdwSupportedOptions = 1;
       pdwEnabledOptions = 2;
  }

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

  #endregion

}

 

4.关于部署

编写INF 文件aa.inf

4.1

[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
hook1=hook1
[hook1]

run=msiexec.exe /i "%EXTRACT_DIR%\ClassroomViewerControl.msi" /qn

4.2.

  建立一个windows安装项目,并将ActiveX控件的主输出添加到项目中。然后,改动ActiveX控件的主输出文件的属性,将其Register属性改为vsdrpCOM.

4.3

创建CAB 文件 使用CAB SDK 中的工具CABARC.EXE (下载地址http://download.microsoft.com/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/Cabsdk.exe)

CABARC.EXE -s 6144 n  yourActivex.cab yourActivexSetupProject.msi aa.inf

-s 6144:为签名留下6k的空间 n 创建cab

4.4  生成一个数字证书

makecert -r -n "CN=MDCTMActivex" -b 01/01/2008 -e 01/01/2018 -sv c:\MDCTMActivex.pvk c:\MDCTMActivex.cer

4.5 添加数字签名 (Vs command line)

signtool signwizard

然后按提示进行。

4.6 在IE中导入该证书

5. 编写HTML如下

<html>…..

object id="activexId" name="activexId" classid="clsid:449D8AB3-7F71-4cdf-B506-65D0836C3170" codebase="MDCTIMActivex.cab"  Width="900" Height="400" VIEWASTEXT> </object>   …

posted @ 2010-01-11 16:12  彷徨......  阅读(274)  评论(0编辑  收藏  举报