【问题标题】:ActiveX COM in C#: how to bind C# events method to VBS subC# 中的 ActiveX COM:如何将 C# 事件方法绑定到 VBS 子
【发布时间】:2016-05-12 00:07:05
【问题描述】:

假设我需要通过 C# 创建一个 activex COM。这样做的原因是需要使用 SDK,用 C# 实现并由 3d 方供应商提供。我一直在关注 SO 中的一些很好的示例,以使用 C# 创建 ActiveX COM 并通过 .aspx 中的类 ID 加载它。当有人点击网页上的按钮时,我也成功调用了新的 COM 方法。

现在的问题是,大多数新的 COM 方法都使用异步回调函数来等待供应商响应。比如在新的COM方法hello()中,有一个对应的回调函数onHello(),当COM dll收到vendor的响应时会触发。

我的问题是,如何将 onHello() 函数调用与我的网页 VBS 子程序(例如 NewCOMID_onHello())绑定,以便我可以在网页上显示一些内容以通知用户。我不想使用忙等待来无限检查。

这在 C++ 中可能很简单,因为我们可以尝试通过 .idl 文件等或 BEGIN_CONNECTION_POINT_MAP 等将回调函数映射到 VBS。但我不确定如何在 .Net/C# 中这样做。我尝试使用 ComSourceInterfaces,但是当供应商响应触发一种新的 COM 方法(例如 onHello())时,仍然无法找出如何触发特定的 VBS 子。

或者,这是否可行?我知道 msft 正在为 Edge 放弃 Activex,但我们现在不能离开 Activex。

感谢任何提示/帮助!!

Not a dup to Expose an event handler to VBScript users of my COM object,因为:1)COM 服务器使用 C++,而不是 C#/.net 2)脚本未在 VBS 中完成

【问题讨论】:

  • 我无法触及用 C++ 实现的旧 COM。我需要通过 C# 创建一个新的 COM。并且这两个 COM 将并存/同时由 IE 加载。
  • 假设我通过 ComSourceInterfaces 公开了 onHello() 回调,这将由供应商响应触发。我如何将它与 VBS 子连接起来。 .vbs 文件由我们的 .aspx 加载。
  • 您的 VBS 订阅此新事件的方式与订阅原始事件的方式完全相同。从 VBS 的角度来看(任何 COM 客户端),它不知道也不关心 COM 对象是用什么语言编写的。
  • 谢谢米奇!您是否可以提供一些代码来“订阅”这个新的 COM 事件(不是常规的 html onClick、mouseOver、事件)?关于网页中的新 COM ID、vbs 子名称、COM dll 事件方法等的任何命名约定?任何链接也有效...谢谢
  • Expose an event handler to VBScript users of my COM object 的可能重复项。虽然COM服务器是c++,但是关于事件订阅的answer是VBScript

标签: c# .net vbscript com activex


【解决方案1】:

我尝试了很多链接,似乎以下两个将我引向了正确的方向:

https://code.msdn.microsoft.com/windowsdesktop/csactivex-c3f43e7d http://simpcode.blogspot.com/2013/09/c-com-interop-and-events.html

当后端异步调用返回响应时,至少我可以看到一些警报弹出窗口

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 2017-05-16
    相关资源
    最近更新 更多