Все классы, открытые для 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();
}
};
таким образом, у вас есть фабричный класс с конструктором без параметров.Вы создаете экземпляр фабрики, а затем вызываете метод создателя для создания экземпляра вашего класса.