问题标签 [scripting-interface]

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 投票
8 回答
3599 浏览

.net - 如何开始为我的 .NET 应用程序设计和实现脚本接口?

如何开始为我的 .NET 应用程序设计和实现脚本接口?

VSTA(.NET 相当于VBAfor COM),但据我了解,我必须为每次安装我的应用程序支付许可费。它是一个开源应用程序,所以这不起作用。

还有例如解释器的嵌入(IronPython?),但我不明白这将如何允许将“对象模型”(见下文)暴露给外部(或内部)脚本。

子问题:

  • .NET 中的脚本接口故事是什么?在 .NET 中执行此操作是否微不足道?
  • 例如,我的应用程序中的某些 .NET 对象及其包含的对象是否可以在运行时声明为可从外部访问?
  • 外部脚本如何访问我的应用程序(通过对象模型)?

背景:

我曾经为 Macintosh 应用程序设计并实现了一个相当复杂的脚本接口,用于从质谱仪(Mac OS,System 7)采集和分析数据,后来又为 Windows 应用程序设计并实现了 COM 接口。

两者都设计有“对象模型”和类(可以具有属性)。这些是重载的词,但在脚本接口上下文中,对象模型本质上是特定类对象的包含层次结构。类具有属性、包含对象的列表,并且不仅是数据,还可以具有动词(动作/方法)。例如,在 Macintosh 案例中,定义的应用程序对象可以包含一个采集对象,该对象具有仪器中使用的电压和fireLater动词的属性——所有这些都可以从外部脚本中看到。

请注意,在这两种情况下,用于实现应用程序的编程语言中的类/对象都与脚本对象模型无关。对于 Macintosh 案例,用于实现脚本接口的机制是由 Apple 定义的。Apple 还定义了一些关于如何设计对象模型的标准。例如,类中某些常见属性的标准化名称。

或者就像在 Microsoft Office 应用程序中公开的 COM 接口中一样,应用程序对象可用于添加到其文档列表(具有创建文档的 GUI 表示的副作用)。

外部脚本可以在容器中创建新对象并在任何给定时间浏览层次结构的内容。在 Macintosh 中,案例脚本可以用AppleScriptFrontier等编写。

在 Macintosh 上,脚本接口的实现非常复杂。Metroworks的 C++ 类库对它的支持(这个名字现在让我忘记了)使它变得更加简单。

0 投票
1 回答
2213 浏览

c# - IronRuby 作为 .NET 中的脚本语言

我想在我的 .NET 项目中使用 IronRuby 作为脚本语言(例如Lua)。例如,我希望能够从 Ruby 脚本订阅特定事件,在宿主应用程序中触发,并从中调用 Ruby 方法。

我正在使用这段代码来实例化 IronRuby 引擎:

假设 index.rb 包含:

我如何能:

  1. 使 C# 方法订阅(在主机应用程序中定义)从 index.rb 可见?
  2. 从主机应用程序调用稍后的处理程序方法?