我想用我在c#中編寫的代碼擴展vbscript的功能。我已經編寫了一些類來自動化SAP GUI,並且希望在我擁有的所有vbscript文件中使用這些類。如何用C#擴展vbscript#
我有數百個VBScript文件,知道它將需要幾年時間才能將它們轉換爲C#。所以我認爲將我的C#類暴露給vbscript會更快。
你知道如何做到這一點或知道任何在網上我可以學習的參考?
我想用我在c#中編寫的代碼擴展vbscript的功能。我已經編寫了一些類來自動化SAP GUI,並且希望在我擁有的所有vbscript文件中使用這些類。如何用C#擴展vbscript#
我有數百個VBScript文件,知道它將需要幾年時間才能將它們轉換爲C#。所以我認爲將我的C#類暴露給vbscript會更快。
你知道如何做到這一點或知道任何在網上我可以學習的參考?
我不知道您是從命令行還是從Office內運行您的VBScript。
如果是前者,您可以創建一個或多個命令行應用程序,您可以使用任何腳本語言調用該程序,並且可以像其他命令行工具那樣將參數&傳遞給動作說明符。 (在這種情況下也考慮轉移到PowerShell - 它比VBScript的命令行腳本優化效果更好)&與.NET有很好的集成。
如果是後者,您可能需要使用RegAsm註冊您的C#類,然後根據任何其他COM類型創建C#類型的實例。看到這個職位的詳細信息:How do I call .NET code (C#/vb.net) from vbScript?
VB腳本運行在瀏覽器運行的時間裏面在客戶端上。
我知道在瀏覽器中運行的唯一C#解決方案是silverlight。但它仍然只是c#。
您可以從腳本語言訪問C#代碼像Java腳本的VB-,通過與[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);
}
}
你必須註冊這些類當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.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。 –