C# 如何用C语言扩展vbscript#

C# 如何用C语言扩展vbscript#,c#,vbscript,C#,Vbscript,我想用我用c#编写的代码扩展vbscript的功能。我已经编写了一些用于自动化SAP GUI的类,并且希望在我拥有的所有vbscript文件中使用这些类 我有数百个vbscript文件,并且知道将它们全部转换为C#需要几年的时间。因此,我认为将我的c#类公开给vbscript会更快 您知道如何执行此操作,或者知道我可以在线学习的参考资料吗?我不知道您是从命令行还是在Office之类的工具中运行VBScript 如果是前者,您可以创建一个或多个命令行应用程序,您可以从任何脚本语言调用这些应用程序,

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

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


您知道如何执行此操作,或者知道我可以在线学习的参考资料吗?

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

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


如果是后者,您可能需要使用RegAsm注册您的C#类,然后根据任何其他COM类型创建C#类型的实例。有关更多详细信息,请参阅本文:

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


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

使用[ComVisible]属性将C代码公开给vbscript。