2013-05-04 41 views
0

我想使用msscript.ocx從C#調用VBScript,並允許VBScript代碼回調C#程序中的函數。從VBScript中回調C#函數使用msscript.ocx運行

例如,在以下VBScript代碼中,Clicktext是使用msscript.ocx運行VBScript的相同clss中的自定義C#函數。

For i=0 to i=4 

    Clicktext("Auto") 

Next 

Clicktext函數應該被調用5次。

有沒有辦法做到這一點?

+0

像這樣的東西http://stackoverflow.com/questions/12118077/using-javascript-for-custom-purposes – I4V 2013-05-04 20:12:20

回答

2

一起Interop.MSScriptControl參考該標記有ComVisible特性控制檯應用程序:

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

演示如何調用從VBScript代碼一個C#對象的加入到MSScriptControl的方法。

+0

非常感謝霍納!您提供的解決方案爲我工作。 – Jaskaran 2013-05-06 18:59:39

+0

@Jaskaran如果解決方案奏效,請考慮+1並將答案標記爲正確。 – 2014-07-02 23:30:55

+0

只需要注意一點:將派生類添加爲腳本Object可能會導致嚴重的混亂。我正在添加從Form派生的類。該類的方法從未被調用過。我很快刪除「:表單」代碼開始工作。 PS:上面的代碼幫我找到了這個問題,所以+1;) – SoLaR 2016-12-30 18:18:27