首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CCW的Sub ()上使用构造函数

在CCW的Sub ()上使用构造函数
EN

Stack Overflow用户
提问于 2010-07-13 12:55:55
回答 1查看 255关注 0票数 0

我正试图为我的VBA项目创建一个COM类库,而我似乎遇到的一个限制是在New()子例程上使用构造函数。在创建新的COM类之后,将创建一个带有以下注释的Public ()

‘一个可创建的COM类必须有一个没有参数的Public ()’,否则,该类将不会在COM注册表中注册,也不能通过CreateObject创建。

显然,我想用新关键字创建更多的子例程,这些子程序允许不同的参数。但是,当我尝试这样做并在VBA中实现对象时,当我试图输入“预期语句结束”的参数时,会出现一个错误。如果任何人有任何信息,将不胜感激。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-14 04:58:03

所有公开给COM的类都必须有一个无参数构造函数句点。原因是当客户端实例化类时,调用最终进入CoCreateInstance()全局函数(或几乎相同的IClassFactory::CreateInstance() )。CoCreateInstance() (或IClassFactory::CreateInstance())无法将参数传递到类的构造函数中,因此类必须有一个无参数构造函数--该构造函数将用于在内部实例化类。

如果您需要的不仅仅是一个无参数构造函数--使用一个工厂类。伪码:

代码语言:javascript
复制
// this should be made COM-exposed
interface IYourClassInterface {
};

// this should not be made COM-exposed
class CYourClass {
public:
    CYourClass( parameters ) {}
};

class CYourClassFactory {
public:
   CYourClassFactory() {} //<- parameterless constructor
   IYouClassInterface* CreateInstance( parameters here )
   {
      return new CYourClass();
   }
};

这样,您就有了一个带有无参数构造函数的工厂类。实例化工厂,然后调用它的创建者方法来实例化类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3237360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档