我有一个DLL(用C#编写),包含一个带有2个构造函数的类;默认(无参数)构造函数,另一个有3个参数。
在VBscript中,我想调用第二个构造函数,但CreateObject
只接收classValue
参数,没有可能的arguments
参数。
我想CreateObject
的底层实现使用系统的CoCreateObject
函数,根据this answer不支持参数,但另一方面有QTP / UFT {{1}能够做到这一点的东西,所以必须有一种方法可以在纯VBscript中完成它。
(如果可能的话,我想避免使用明显的DotNetFactory
方法解决方案。)
关于如何调用非默认构造函数的任何想法?
答案 0 :(得分: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自动化是一个非常值得注意的例子。