调用 COM 的非默认构造函数 class
Call non-default constructor of COM class
我有一个包含 class 和 2 个构造函数的 DLL(用 C# 编写);一个默认(无参数)构造函数,另一个有 3 个参数。
在VBscript中,我想调用第二个构造函数,但是CreateObject
只接收到一个classValue
参数,没有可能的arguments
参数。
我猜 CreateObject
的底层实现使用系统的 CoCreateObject
函数,根据 this answer 不支持参数,但另一方面有 QTP/UFT的 DotNetFactory
能够做到这样的事情,所以必须有一种方法可以在纯 VBscript 中做到这一点。
(我想尽可能避免明显的 init
方法解决方案)。
关于如何调用我的非默认构造函数的任何想法?
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() 方法来创建您的 class 对象。否则,COM 对象模型中的一种非常常见的模式,Microsoft Office 自动化就是一个非常值得注意的例子。
我有一个包含 class 和 2 个构造函数的 DLL(用 C# 编写);一个默认(无参数)构造函数,另一个有 3 个参数。
在VBscript中,我想调用第二个构造函数,但是CreateObject
只接收到一个classValue
参数,没有可能的arguments
参数。
我猜 CreateObject
的底层实现使用系统的 CoCreateObject
函数,根据 this answer 不支持参数,但另一方面有 QTP/UFT的 DotNetFactory
能够做到这样的事情,所以必须有一种方法可以在纯 VBscript 中做到这一点。
(我想尽可能避免明显的 init
方法解决方案)。
关于如何调用我的非默认构造函数的任何想法?
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() 方法来创建您的 class 对象。否则,COM 对象模型中的一种非常常见的模式,Microsoft Office 自动化就是一个非常值得注意的例子。