【问题标题】:Call DLL methods from Javascript从 Javascript 调用 DLL 方法
【发布时间】:2026-02-13 19:20:05
【问题描述】:

我想从 javascript 调用一个 dll 的方法。

我关注了这篇文章Creating activex objects with c#

由于 activeX 仅在 IE 中有效,我应该如何在 FireFox 或 Chrome 中从 javascript 调用这些方法?

我已经有一个使用 ActiveX 对象来调用 Dll 方法的应用程序,但它只能在 IE 中工作。

有什么方法可以让我的应用浏览器独立?

更新

我使用 Jquery async AJAX 和 webservice 来调用 dll 方法:

var to_return = $.ajax({
         type: "POST",
         url: "Default.aspx/CallMe", //CallMe is WebService method
         data: "{}", // parameter to pass
         async: false,
         contentType: "application/json; charset=utf-8",
         dataType: "json",
     });

     alert(to_return.responseText);

如果 CallMe() 返回一个字符串,它会警告它为 {"d":"True"} 其中“True”是从 CallMe 返回的字符串。

我怎样才能从中只得到返回的字符串?

另外,如果 webservice 的 CallMe() 方法返回该 DLL 中存在的类的对象? 如何在 JavaScript 中检索该对象?和 我可以使用返回的对象调用该类的方法吗?

请帮忙。

【问题讨论】:

标签: javascript dll


【解决方案1】:

您不能只在浏览器中执行 dll 方法(这是出于安全原因)。
为了在浏览器中执行一些编译后的代码,你必须使用plugin

ActiveX 只是在 IE 中实现浏览器插件的一种方法。所有其他浏览器使用不同的插件接口。
然后,如果用户将在浏览器中安装您的插件 - 该插件将从 JS 中获得,您可以使用它在 dll 中执行某些功能。

【讨论】:

  • 感谢 VitaliyG。目前我正在使用这个插件选项。
  • 是的,你可以。您只需要发明或模拟 COM。基本上,您向服务器发送一个 ajax 请求以打开一个 dll 并将其模块指针存储在一个全局字符串中到模块 Id 映射。然后你可以发送服务器上模块的字符串id和函数名。服务器可以加载模块函数并将其存储在字符串到函数指针映射中。在此之后,您可以向服务器发送请求以通过其服务器 id 字符串调用该函数。尽管您需要自己的变体方案来支持使用参数。
【解决方案2】:

这样的事情应该可以工作:

var obj = new ActiveXObject("ABCDll.testMethod");
var vResult = obj.TestMethod();
alert(vResult);

:: 更新 ::

link查看 hazerd 的回答。

【讨论】:

  • 亲爱的@Nirmal 它适用于 chrome 吗?我认为 ActiveXObject 只允许在 IE 中使用。