由于工作需要,最近开发了个页面通过JS 调用Winform的程序。
注意以下几点:
第一,在Winform 组件 中,需要在Js中调用 的中窗体对象,需要加如下标签:
[Guid("53CDE3DE-1005-43B8-87C5-F1899BF0AC54")]----此GUID可以自己生成一个。
[System.Runtime.InteropServices.ComVisible(true)]
public partial class FlowWrapper {...}
在 我用到的FlowWrapper 类中,有一些public 方法,用来通过JS传入参数,如:
/// <summary>
/// 设置数据
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
public void SetData(string key, string value)
第二,把开发好的Winform 组件打包成安装包。放在Web程序中,提供给用户下载安装。(其实就是把相关的动态库复制到用户机子上,还有就是在注册表中注册)
第三,在我的页面中,通过如下代码进行调用组件:
<body >
<object id="FlowOcx" classid="clsid:53CDE3DE-1005-43B8-87C5-F1899BF0AC54" width="80%"
height="80%" viewastext>
</object>
<script type="text/javascript">
function startOcx()
{
try
{
var id = "<%=FlowID%>";
var type= "<%=ActionType%>";
var ocx = document.getElementById('FlowOcx');
ocx.SetData("Key_InnerControl", "InnerControl_FlowDefine");
ocx.SetData("Key_ActionType", type); --传入参数
ocx.SetData("Key_FlowID", id); ---传入参数
ocx.SetData("Key_StartControl", "");
}
catch (ex)
{
alert(ex.description);
alert("流程组件没有安装,需要下载安装!");
window.location.href = "../../Tools/FlowOcxSetup.msi";
}
}
startOcx();
</script>
其实也很简单的,但,这个现在只能 在IE下能成功,在Firefox下,调用不成功。不知为何 。