2012-01-25 18 views
2

私はコンソールアプリケーションmyapp.exeを持っています。アプリ内に関数があります。コンソールアプリケーションでVBScriptから関数を呼び出す

public static int AddIntegers(int a, int b) 

この関数を外部から見えるようにして、VBscriptが呼び出せるようにすることはできますか?私はDLLに関数を移動する必要がありますか私はEXEに残して、それを見えるようにすることはできますか?もしそうなら、どうですか?

答えて

3

が理想的、あなたはDLLを作り、あなたが公開する必要がある機能の可視コムを設定する必要があります。その後、あなたのVBScriptでは、あなたのような何かを行うことができます。

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; 
     } 
    } 
} 

あなたは、あなたがするVBScriptからそれを呼び出すことができるようにRegasm.exeによってでそれを登録する必要があり、あなたのDLLをコンパイルした後:

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

この回答はレイマンドでHow to call a .NET DLL from a VBScriptを投稿CodeProjectのに基づいていますマカレイ。私はそれを読むことをお勧めします。

また、How to call C# DLL function from VBScriptなどの他のstackoverflowの投稿を確認する必要があります。

+0

多くのおかげで。これは非常に便利です。それがEXEにある場合、それを呼び出すことができないと言っていますか?あるいはそうすることが悪い習慣であり、本当に私はそれをDLLに移すべきだと言っていますか? – FunLovinCoder

+0

@FunLovinCoderタイプライブラリとそのCOMオブジェクトをEXEに格納するシナリオがあります。しかし、これらはVBScript以外のシナリオ用です。あなたのケースでは、コンソールアプリケーションとVBScript共有機能の両方を持っているため、通常は共有機能をDLLに移行するのが一般的です。そうすれば、VBScriptとEXEの両方がDLLを共有していますが、EXEを呼び出すVBScriptではありません。または、この方法で実行する必要がある場合は、CreateObject( "WScript.Shell")とRun()を呼び出してEXEのMainを呼び出し、コマンドライン引数で関数を呼び出します。 –

2

はい、マネージコードライブラリ(DLL)をVBScriptで表示する必要があります(ほとんどの場合、GACを通じて)。

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

私はexeを持っているDLLを持っていません。 – FunLovinCoder

+1

あなたは、管理されたアセンブリがそのメソッドをvbscriptに公開することを_how_説明できるでしょうか? OPはすでにスクリプトに見えるようにしたいと言っていて、今はどのようにする必要があります。 – jlafay

+0

RegAsmを使用するアセンブリを登録してCreateObjectを使用 – BLUEPIXY

関連する問題