我有一个控制台应用程序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并通过你的命令行参数调用你的函数。 –