Обратный вызов функции C# из VBScript, запущенный с msscript.ocx

Я хочу использовать msscript.ocx для вызова VBScript из C# и позволить коду VBScript вызывать функции в программе на C#.

Например, в следующем коде VBScript Clicktext пользовательская функция C# в том же clsss, которая использует msscript.ocx для запуска VBScript.

For i=0 to i=4

    Clicktext("Auto")

Next

Функция Clicktext должна вызываться 5 раз.

Есть ли способ сделать это?

1 ответ

Решение

Это консольное приложение ComVisible со ссылкой на Interop.MSScriptControl:

// !! http://sandsprite.com/blogs/index.php?uid=11&pid=83

using System;
using MSScriptControl;

//class test has to support IDispatch to AddObject(). So make the assembly ComVisible
//via AssemblyInfo.cs or [assembly: System.Runtime.InteropServices.ComVisible(true)]

namespace MsScTest {
    public class CsHelper {
        public int increment(int y) { return ++y; }
    }

    class Program {
        public static MSScriptControl.ScriptControl sc = new ScriptControl();
        static void Main(string[] args) {
            sc.Language = "VBScript";
            sc.AddObject("CsHelper", new CsHelper(), true);
            sc.AddCode(@"
Function inc(n)
  inc = CsHelper.increment(n)
End Function
MsgBox inc(4711), 0, 'With a little help from my friend CsHelper'
".Replace("'", "\""));
            return;
        }
    }
}

пудинг:

---------------------------
With a little help from my friend CsHelper
---------------------------
4712
---------------------------
OK   
---------------------------

демонстрирует, как вызвать метод объекта C# из кода VBScript, добавленного в MSScriptControl.

Другие вопросы по тегам