问题标签 [iactivescript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
555 浏览

c++ - 如何从 VBScript 获取值到我的 C++ 主机?

我正在尝试从 C++ ATL 控制台应用程序(非 VBS 文件,而只是嵌入在我的代码中的脚本)执行 VBScript 并从中取回字符串。

我试过这样的事情:

另请参阅此问题以了解如何设置:

如何从 C++ 中加载和调用 VBScript 函数?

如果我运行它,VBScript 会抱怨不存在的“WScript”对象。

我尝试替换WScript.EchoMsgBox并且代码工作正常(但当然不会返回字符串)。

我试着用这个:

这会将我的字符串写入启动 C++ 应用程序的控制台,但不要将字符串返回给我的代码。

如何s从脚本中获取值到我的主机进程中?

只是为了澄清:我不想将 VBS,而不是字符串保存到临时文件中。

目标是在没有磁盘访问的情况下将所有内容保存在内存中。

我知道我可以利用注册表,但我想避免提升。不知道一些内存共享是否适用于 vbscript。

另一个想法是命名管道,但我不知道如何在 c++ 和 vbscript 之间共享一个。

0 投票
1 回答
127 浏览

c++ - 如何实现从 Windows 脚本主机到脚本的事件分派

我有一个使用 Visual C++ 2019 构建的 C++ COM(多线程单元模型)应用程序。我正在使用基于 COM 的 Active Script 接口和类。我有一个{F414C260-6AC0-11CF-B6D1-00AA00BBBB58}创建和设置的 JavaScript(“JScript”真的是 CLSID )活动脚本 COM 对象。一切都运行得非常好(不幸的是,对于一些变得默默无闻的东西)。

是否有一种惯用的方法来注册和调用事件侦听器,其中脚本可以使用像https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener之类的 API ,并且我可以从脚本主机调度事件(C++ )? 澄清一下,我可以很好地IDispatch从脚本调用接口方法,我想从程序调用之前使用这些方法传递给程序的脚本函数。GetScriptDispatch是别的东西——它允许我调用全局脚本命名空间中可用的方法,但我需要调用我传递给代理(从脚本)“addEventListener”方法的函数。

我依赖这个功能,因为我想分派事件。基本上,我希望addEventListener在某些代理对象(例如添加到脚本命名空间的AddNamedItem对象)上可用,并且当 C++ 应用程序中的某些事件发生时,我需要调用通过调用该方法添加的事件侦听器。

我已经阅读了一些关于IConnectionPoint的内容,并且 Active Script 文档多次简要提到“事件接收器”,但没有提供有关如何使用它们以及用于什么用途的示例。还有IBindEventHandler界面,没有过多解释它的用途。

我知道这是古老的东西,但我喜欢 COM 和 Active Script 接口有几个实现,这对我来说增加了实用性。