【问题标题】:Call non-default constructor of COM class调用 COM 类的非默认构造函数
【发布时间】:2015-10-20 06:15:19
【问题描述】:

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

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

我猜CreateObject 的底层实现使用系统的CoCreateObject 函数,根据this answer 不支持参数,但另一方面有QTP/UFT 的DotNetFactory 能够做到这一点,所以必须有一种方法可以在纯VBscript中做到这一点。

(如果可能,我想避免明显的init 方法解决方案)。

关于如何调用我的非默认构造函数的任何想法?

【问题讨论】:

    标签: c# vbscript constructor com createobject


    【解决方案1】:

    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 自动化就是一个非常显着的例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多