4

2 つのコンストラクターを持つクラスを含む DLL (C# で記述) があります。デフォルト (引数なし) のコンストラクターと、3 つの引数を持つ別のコンストラクター。

VBscript で、2 番目のコンストラクターを呼び出したいのですが、パラメーターCreateObjectを受け取るだけclassValueで、可能なargumentsパラメーターはありません。

CreateObjectの基本的な実装はシステムのCoCreateObject関数を使用していると思いますが、この回答によれば引数はサポートされていませんが、一方でDotNetFactory、そのようなことができるQTP/UFTがあるため、純粋なVBscriptでそれを行う方法が必要です。

init(可能であれば、明白な方法の解決策を避けたい)。

デフォルト以外のコンストラクターを呼び出す方法についてのアイデアはありますか?

4

1 に答える 1

5

COM は、コンストラクターへの引数の受け渡しをサポートしていません。基になるオブジェクト ファクトリ メソッド (IClassFactory::CreateInstance) は、引数を受け入れません。

回避策は非常に簡単です。ソフトウェア エンジニアリングのすべての問題は、別のレベルの間接化によって解決できます :) 独自のファクトリ メソッドを作成するだけです。コンストラクターが必要とする引数を取るものを書くことができます。だいたい:

[ComVisible(true)]
public interface IFoo {
   //...
}

class Foo : IFoo {
   public Foo(int a, string b) { ... }
   //...
}

[ComVisible(true)]
public class FooFactory {
    public IFoo CreateInstance(int a, string b) {
        return new Foo(a, b);
    }
}

そして、VBScript は FooFactory の CreateInstance() メソッドを呼び出して、クラス オブジェクトを作成できるようになりました。それ以外は、COM オブジェクト モデルの非常に一般的なパターンであり、Microsoft Office オートメーションは非常に注目すべき例です。

于 2015-07-29T12:09:20.883 に答える