我正试图为我的VBA项目创建一个COM类库,而我似乎遇到的一个限制是在New()子例程上使用构造函数。在创建新的COM类之后,将创建一个带有以下注释的Public ()
‘一个可创建的COM类必须有一个没有参数的Public ()’,否则,该类将不会在COM注册表中注册,也不能通过CreateObject创建。
显然,我想用新关键字创建更多的子例程,这些子程序允许不同的参数。但是,当我尝试这样做并在VBA中实现对象时,当我试图输入“预期语句结束”的参数时,会出现一个错误。如果任何人有任何信息,将不胜感激。
谢谢。
发布于 2010-07-14 04:58:03
所有公开给COM的类都必须有一个无参数构造函数句点。原因是当客户端实例化类时,调用最终进入CoCreateInstance()全局函数(或几乎相同的IClassFactory::CreateInstance() )。CoCreateInstance() (或IClassFactory::CreateInstance())无法将参数传递到类的构造函数中,因此类必须有一个无参数构造函数--该构造函数将用于在内部实例化类。
如果您需要的不仅仅是一个无参数构造函数--使用一个工厂类。伪码:
// 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();
}
};这样,您就有了一个带有无参数构造函数的工厂类。实例化工厂,然后调用它的创建者方法来实例化类。
https://stackoverflow.com/questions/3237360
复制相似问题