1 Classlibaray 注意事项
AssemblyInfo.cs 中更改:
l [assembly: ComVisible(true)]
l //[assembly: Guid("98f088b5-bb39-4762-ba3e-1a5acfb91573")]
Class中更改:
l using System.Runtime.InteropServices;
l [Guid("98f088b5-bb39-4762-ba3e-1a5acfb91573")]
public class Class1{……}
项目属性更改
l Bulid:勾选Register for COM interop
l Signing: 强命名,可以直接自动生成key文件,后缀 snk,也可以使用sn.exe工具(用vs的行命令窗体)
2 制作setup注意事项
l 建立setup project
l 右键,view->FileSystem
其中主要文件夹介绍:
Application:ActiveX安装的文件夹(主dll输出)
Global Assembly Cache:gac ;C:/windowns/assembly/
System:安装在C:/Windowns/system32/ (若含有非c#的dll,一般放在改文件夹)
l 主输出文件夹属性更改
Register ——>vsdrpCOM,作为com调用
l 项目属性更改
F4
RemoveBeforeVersions 设为true
ProduceName & Title 设为你想要显示的安装名字
编译生成msi,和exe文件,一般使用msi文件,可以在本机安装下,测试是否打包成功。
3 制作cab包
Cab包实际就是将msi文件和inf文件打成一个mszip包
Inf文件在zip包中是直接可视文件
具体的inf包文件的资料,可以搜索msdn,关键字:cabarc,可以查到inf和carbarc的基本信息
举个demo:
[Add.Code]
SLPActiveX.dll=SLPActiveX.dll(主输出文件的dll,安装在system32,gac中的文件,不用在这标明)
[SLPActiveX.dll]
Clsid={a14b1791-4d3a-4bf6-8787-619143e3772d}(和主输出类guid一致)
FileVersion=1,0,0,0
hook=hook1
[hook1]
run=msiexec /i %EXTRACT_DIR%/SLPActiveXSetup.msi /q (是否显示安装文件?没有的话,就是显示)
[Version]
; This section is required for compatibility on both Windows 95 and Windows NT.
Signature="$CHICAGO$"
AdvancedInf=2.0
Cab包的打包工具,cabarc.exe可以直接在vs的行命令窗体中调用。具体语法参考msdn
语法demo:
cabarc n Demo.cab D: /SetUp.msi D: /DemoSetup.inf
打包成Demo.cab
在行命令显示的窗口下
4 javascript调用注意事项
将cab包放在网站项目中
l Html调用ActiveX
<object id="Object1" classid="clsid:98f088b5-bb39-4762-ba3e-1a5acfb91573" width="600"
style="height: 233px" codebase="ActiveX/Demo.cab" viewastext>
</object>
Classid &codebase是需要特别注明的地方
l JS调用方法:
function CallMethod()
{
var obj = document.getElementById("Object1");
obj.TextString; //调用公共属性
alert(obj.demo1()); // 调用公共方法
alert(obj.demo2(1,"---oooo-----",false)) //int string bool 的参数
}
测试站点,需要把本机的防火墙软件和微软自带的防火墙关闭,建立iis虚拟站点
同网关内他人的机器上使用Ip访问Demo: http://IP/websitename/
建议使用虚拟机软件VMware,本机就可测试,非常方便。
将windows control library 打包为 activex
与classLibrary最大的区别是,windows control library带有可显示介面,在界面内的可以编辑事件方法,要发布control libarary,步骤和以上一样,只是主项目改为controllibrary。其他引用dll需要添加到安装项目中去.
安装activeX成功后,可以查看下各安装文件夹是否有相应dll
项目中遇到的问题:
总是提示,一个非C#的dll找不到
原因:可能是这个dll引用的系统dll在该机器上没有,建议使用工具Dependency Walker查看该机上的dll,可以查看该dll引用的其他dll在不在。不存在的逐个添加。