如何用c#扩展vbscript
本文关键字:vbscript 扩展 何用 | 更新日期: 2023-09-27 17:51:25
我想用c#编写的代码扩展vbscript的功能。我已经编写了一些类来自动化SAP GUI,并希望在我所有的vbscript文件中使用这些类。
我有几百个vbscript文件,我知道把它们全部转换成c#需要几年的时间。所以我认为将我的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" />
如果我错过了什么,或者如果你需要更多的例子,请告诉我。我不介意。