繁体   English   中英

调用COM类的非默认构造函数

[英]Call non-default constructor of COM class

我有一个DLL(用C#编写),包含一个带有2个构造函数的类; 一个默认(无参数)构造函数,另一个有3个参数。

在VBscript中,我想调用第二个构造函数,但CreateObject只接收一个classValue参数,没有可能的arguments参数。

我想CreateObject的底层实现使用系统的CoCreateObject函数,根据这个答案不支持参数,但另一方面有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()方法来创建你的类对象。 否则,COM对象模型中的一种非常常见的模式,Microsoft Office自动化是一个非常值得注意的例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM