2013-01-12 33 views
0

我想用我在c#中編寫的代碼擴展vbscript的功能。我已經編寫了一些類來自動化SAP GUI,並且希望在我擁有的所有vbscript文件中使用這些類。如何用C#擴展vbscript#

我有數百個VBScript文件,知道它將需要幾年時間才能將它們轉換爲C#。所以我認爲將我的C#類暴露給vbscript會更快。

你知道如何做到這一點或知道任何在網上我可以學習的參考?

+0

使用[ComVisible]屬性將C#代碼暴露給vbscript。 –

回答

1

我不知道您是從命令行還是從Office內運行您的VBScript。

如果是前者,您可以創建一個或多個命令行應用程序,您可以使用任何腳本語言調用該程序,並且可以像其他命令行工具那樣將參數&傳遞給動作說明符。 (在這種情況下也考慮轉移到PowerShell - 它比VBScript的命令行腳本優化效果更好)&與.NET有很好的集成。

如果是後者,您可能需要使用RegAsm註冊您的C#類,然後根據任何其他COM類型創建C#類型的實例。看到這個職位的詳細信息:How do I call .NET code (C#/vb.net) from vbScript?

1

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" /> 

讓和我知道,如果我錯過了什麼,如果你需要更多的例子。我不介意。