0

C# で記述したコードを使用して、vbscript の機能を拡張したいと考えています。SAP GUI を自動化するクラスをいくつか作成しましたが、これらのクラスをすべての vbscript ファイルで使用したいと考えています。

何百もの vbscript ファイルがあり、それらすべてを C# に変換するには何年もかかることを知っています。したがって、私の c# クラスを vbscript に公開する方が速いと思います。

これを行う方法を知っていますか、または私が勉強できるオンラインの参考文献を知っていますか?

4

2 に答える 2

1

VBスクリプトは、ブラウザ ランタイム内のクライアントで実行されます。

ブラウザー内で実行できると認識している唯一の C# ソリューションは、silverlight です。ただし、それはまだC#です。

VB- of 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);
    }
}

次のように、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" />

何か見逃した場合や、さらに例が必要な場合はお知らせください。私は気にしない。

于 2013-01-12T14:47:44.017 に答える
1

VBScript をコマンド ラインから実行しているのか、Office などから実行しているのかわかりません。

前者の場合、任意のスクリプト言語から呼び出すことができ、他のコマンド ライン ツールと同様にパラメーターとアクション指定子を渡すことができる 1 つまたは複数のコマンド ライン アプリを作成できます。(この場合、PowerShell への移行も検討してください。コマンド ライン スクリプトでは VBScript よりも指数関数的に優れており、.NET との統合が優れています)。

後者の場合、RegAsm を使用して C# クラスを登録し、他の COM 型に従って C# 型のインスタンスを作成する必要があります。詳細については、この投稿を参照してください: vbScript から .NET コード (C#/vb.net) を呼び出すにはどうすればよいですか?

于 2013-01-12T14:33:18.267 に答える