如何用c#扩展vbscript

本文关键字:vbscript 扩展 何用 | 更新日期: 2023-09-27 17:51:25

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

我有几百个vbscript文件,我知道把它们全部转换成c#需要几年的时间。所以我认为将我的c#类暴露给vbscript会更快。

你知道怎么做吗?或者你知道网上有什么参考资料吗?

如何用c#扩展vbscript

我不知道你是从命令行还是从Office之类的东西中运行VBScript。

如果是前者,你可以创建一个或多个命令行应用程序,你可以从任何脚本语言调用,并向其传递参数&操作说明符就像任何其他命令行工具一样。(在这种情况下也可以考虑使用PowerShell——它在命令行脚本方面比VBScript要好得多&与。net很好的集成)。

如果是后者,你可能需要使用RegAsm注册你的c#类,然后按照任何其他COM类型创建你的c#类型的实例。我如何从vbScript调用。net代码(c#/vb.net) ?

VB script在浏览器运行时内的客户端上运行。

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

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

/// <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);
    }
}

你必须在silverlight (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.Content是html页面中silverlight对象的id。

    var gObjLIV = null;
    function onSilverlightPluginLoaded(sender, args) {
        gObjLIV = sender.getHost();
    }

你可以在ASPX页面的html中将这个函数与silverlight对象挂钩,使用这个参数:

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

如果我错过了什么,或者如果你需要更多的例子,请告诉我。我不介意。