2012-01-25 58 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