我有一個控制檯應用程序myapp.exe。在該應用程序是一個功能,我們稱之爲:從VBScript調用控制檯應用程序中的函數
public static int AddIntegers(int a, int b)
是否有可能使該功能從外部看到,這樣一個VBScript能打電話嗎?我是否必須將該函數移動到DLL中,還是可以將它放在EXE中並使其可見?如果是這樣,怎麼樣?
我有一個控制檯應用程序myapp.exe。在該應用程序是一個功能,我們稱之爲:從VBScript調用控制檯應用程序中的函數
public static int AddIntegers(int a, int b)
是否有可能使該功能從外部看到,這樣一個VBScript能打電話嗎?我是否必須將該函數移動到DLL中,還是可以將它放在EXE中並使其可見?如果是這樣,怎麼樣?
理想化,你應該做一個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。
是的,您需要使託管代碼庫(DLL)對VBScript可見(很可能通過GAC)。然後在您的VBScript中,你可以這樣做:
dim yourObject = CreateObject("YourContainingObject");
yourObject.AddIntegers yourFirstInt, yourSecondInt
事情是我沒有DLL我有一個exe文件。 – FunLovinCoder
你可能會解釋_how_託管程序集暴露它的方法到VBScript嗎? OP已經表示,他們希望讓腳本看到它,現在需要如何。 – jlafay
使用RegAsm註冊您的Assembly並使用CreateObject – BLUEPIXY
非常感謝。這非常有用。你是說如果它在EXE中不能被調用?或者你是否說這是不好的做法,我真的應該把它移出一個DLL? – FunLovinCoder
@FunLovinCoder有一些場景可以在EXE中放置類型庫及其COM對象。但是,它們適用於非VBScript方案。在你的情況下,因爲你有一個控制檯應用程序和VBScript共享功能,通常情況下將共享功能移動到一個DLL。這樣,VBScript和你的EXE都共享這個DLL,但是,它不是你的VBScript調用你的EXE。或者,如果你必須這樣運行它,那麼考慮CreateObject(「WScript.Shell」)並調用Run()來調用你的EXE的Main並通過你的命令行參數調用你的函數。 –