.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> …