使用 Javascript ActiveX 对象触发 C# dll
Posted
技术标签:
【中文标题】使用 Javascript ActiveX 对象触发 C# dll【英文标题】:Triggering C# dll using Javascript ActiveX Object 【发布时间】:2012-11-25 08:14:13 【问题描述】:我有一个需要使用 javascript 调用的 c# 类库。下面是C#类的代码。
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms; //required for message box.
namespace csharp.activex.sample
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
InterfaceType(ComInterfaceType.InterfaceIsDual),
ComVisible(true)]
public interface IHello
[DispId(1)]
int ShowDialog();
;
[
Guid("873355E1-2D0D-476f-9BEF-C7E645024C32"),
ProgId("csharpAx.CHello"),
ClassInterface(ClassInterfaceType.None),
ComDefaultInterface(typeof(IHello)),
ComVisible(true)
]
public class CHello : IHello
#region [IHello implementation]
public string Hello()
return "Hello from CHello object";
public int ShowDialog()
System.Windows.Forms.MessageBox.Show("C# is awesome");
return 0;
#endregion
;
public class Class1
public void showDialog()
MessageBox.Show("Visual c# is awesome!");
我构建了这个类,我得到了一个我复制到 c:\DLL 的 dll 文件。下面的代码用于注册DLL
regasm C:\DLL\ActiveXClass.dll /codebase /tlb
消息类型注册成功。
我使用以下 javascript 代码创建了一个 html 文件。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type='text/javascript'>
var myAx1;
function startService()
myAx1 = new ActiveXObject("csharpAx.CHello");
if(myAx1 != null)
myAx1.showDialog();
else
alert("failed");
return false;
</script>
</head>
<body class="sapUiBody" role="application">
<div id="content"></div>
<a href='#' onclick='return startService()'>StartService</a><br />
</body>
</html>
在如此获得的结果页面上,我单击启动服务。但我没有收到任何警报,例如“失败”或“Visual C# 很棒”。
请帮忙
【问题讨论】:
确保您使用的是 IE。还要检查控制台是否有错误(假设 IE8+) @AlvinWong 在控制台中出现错误。 SCRIPT429:自动化服务器无法创建对象 先尝试使用 vb6 中的 COM 对象(例如 winword/excel vba 中的),以确保您的 COM 按预期工作 @SalientBrain VBScript 怎么样 【参考方案1】:我认为最好的解决方案是实施 IObjectSafety,如果您信任您的 activex,您不需要让您的用户检查互联网选项。 第 5 点的这个链接解释了如何做到这一点:http://www.olavaukan.com/2010/08/creating-an-activex-control-in-net-using-c/
【讨论】:
【参考方案2】:我解决了。 Activex 有一个安全选项,需要为此启用。
欲了解更多详情,请查看此链接 http://www.aras.com/Community/forums/p/2527/7698.aspx
【讨论】:
链接已失效。今后,请在链接之外添加文章中的关键信息。以上是关于使用 Javascript ActiveX 对象触发 C# dll的主要内容,如果未能解决你的问题,请参考以下文章
Javascript/Excel ActiveX 对象。查找完全匹配
是否可以将ActiveX对象标记为安全,以便不需要更改IE设置?
如何使用 IPC 将数据从 ActiveX 对象传递到 VB6 应用程序 - (单实例应用程序)?