2012-01-25 57 views
2

我有一個控制檯應用程序myapp.exe。在該應用程序是一個功能,我們稱之爲:從VBScript調用控制檯應用程序中的函數

public static int AddIntegers(int a, int b) 

是否有可能使該功能從外部看到,這樣一個VBScript能打電話嗎?我是否必須將該函數移動到DLL中,還是可以將它放在EXE中並使其可見?如果是這樣,怎麼樣?

回答

3

理想化,你應該做一個DLL和組COM可見你需要公開的功能。

using System; 
using System.Runtime.InteropServices; 
namespace MyDLL 
{ 
    [ComVisible(true)] 
    public class Operations 
    { 
     [ComVisible(true)] 
     public int AddIntegers(int a, int b) 
     { 
      return a + b; 
     } 
    } 
} 

你編譯你的DLL後,您需要與regasm.exe註冊它,這樣就可以從VBScript調用它:

Dim myObj 
Set myObj = CreateObject("MyDLL.Operations") 
Dim sum 
sum = myObj.AddIntegers(3, 5) 

這個答覆是基於CodeProject上通過raymund的發佈How to call a .NET DLL from a VBScript Macaalay。我建議你閱讀它。

此外,你應該檢查其他stackoverflow發佈,如How to call C# DLL function from VBScript

+0

非常感謝。這非常有用。你是說如果它在EXE中不能被調用?或者你是否說這是不好的做法,我真的應該把它移出一個DLL? – FunLovinCoder

+0

@FunLovinCoder有一些場景可以在EXE中放置類型庫及其COM對象。但是,它們適用於非VBScript方案。在你的情況下,因爲你有一個控制檯應用程序和VBScript共享功能,通常情況下將共享功能移動到一個DLL。這樣,VBScript和你的EXE都共享這個DLL,但是,它不是你的VBScript調用你的EXE。或者,如果你必須這樣運行它,那麼考慮CreateObject(「WScript.Shell」)並調用Run()來調用你的EXE的Main並通過你的命令行參數調用你的函數。 –

2

是的,您需要使託管代碼庫(DLL)對VBScript可見(很可能通過GAC)。然後在您的VBScript中,你可以這樣做:

dim yourObject = CreateObject("YourContainingObject"); 
yourObject.AddIntegers yourFirstInt, yourSecondInt 
+0

事情是我沒有DLL我有一個exe文件。 – FunLovinCoder

+1

你可能會解釋_how_託管程序集暴露它的方法到VBScript嗎? OP已經表示,他們希望讓腳本看到它,現在需要如何。 – jlafay

+0

使用RegAsm註冊您的Assembly並使用CreateObject – BLUEPIXY