0

我想用我用 c# 编写的代码来扩展 vbscript 的功能。我编写了一些类来自动化 SAP GUI,并希望在我拥有的所有 vbscript 文件中使用这些类。

我有数百个 vbscript 文件,并且知道将它们全部转换为 C# 需要数年时间。所以我认为将我的 c# 类公开给 vbscript 会更快。

你知道如何做到这一点或知道我可以学习的任何在线参考资料吗?

4

2 回答 2

1

VB脚本运行在客户端浏览器运行时里面。

我知道在浏览器中运行的唯一 C# 解决方案是 silverlight。它仍然只是 c#。

[ScriptableMember]您可以通过使用属性装饰它们来从脚本语言(如 VB- of java-script)访问 c# 代码,如下所示:

/// <summary>
/// Members that can be called from javascript. (or vbscript)
/// </summary>
public sealed class LINEARVIEWER_SL_SCRIPTS {

    [ScriptableMember]
    public void ChangeNetwork(string pNetworkFilterId, string pNetworkFilter) {

        MainViewModel MainVM = (MainViewModel)((MainPage)Application.Current.RootVisual).DataContext;

        long SectionID;

        if (long.TryParse(pNetworkFilterId, out SectionID) == false) {
            throw new FormatException("'" + pNetworkFilterId + "' not a valid section / network ID.");
        }

        MainVM.RoadFilterViewModel.SelectSectionAsync(SectionID, /* completed handler = */ null);
    }
}

您必须在 silverligh (c#) 应用程序启动时注册这些类,如下所示:

        private void Application_Startup(object sender, StartupEventArgs e) {

            ...

            HtmlPage.RegisterScriptableObject("LINEARVIEWER_SL_SCRIPTS", new LINEARVIEWER_SL_SCRIPTS());
        }

然后,您可以从 java(或 vb)脚本中简单地调用这些方法,如下所示:

    function DoAddToLIV(pNetworkFilterId, pNetworkFilter) {
        ...
        gObjLIV.Content.LINEARVIEWER_SL_SCRIPTS.ChangeNetwork(pNetworkFilterId, pNetworkFilter);
        ...
    }

gObjLIB.Contenthtml 页面内的 silverlight 对象的 id 在哪里。

    var gObjLIV = null;

    function onSilverlightPluginLoaded(sender, args) {

        gObjLIV = sender.getHost();
    }

您可以使用此参数将该函数挂钩到 ASPX 页面的 html 中的 silverlight 对象:

<param name="onLoad" value="onSilverlightPluginLoaded" />

如果我遗漏了什么或者您需要更多示例,请告诉我。我不介意。

于 2013-01-12T14:47:44.017 回答
1

我不知道您是从命令行还是从 Office 之类的工具中运行 VBScript。

如果是前者,您可以创建一个或多个命令行应用程序,您可以从任何脚本语言调用这些应用程序,并向其中传递参数和操作说明符,就像任何其他命令行工具一样。(在这种情况下还可以考虑迁移到 PowerShell - 它在命令行脚本编写方面比 VBScript 好得多,并且与 .NET 有很好的集成)。

如果是后者,您可能需要使用 RegAsm 注册您的 C# 类,然后按照任何其他 COM 类型创建您的 C# 类型的实例。有关详细信息,请参阅此帖子:如何从 vbScript 调用 .NET 代码 (C#/vb.net)?

于 2013-01-12T14:33:18.267 回答