Я держал пари, что Вы не знали, что были функциональным программированием, когда Вы использовали:
Вы можете думать о CoCreateInstance ()
как об интерфейсе к анонимному классу фабрики.
В ООП часто бывает разумно использовать фабричный шаблон, чтобы просто вызвать создание метод и получить указатель / ссылку на интерфейс, не зная, какой именно класс стоит за этим интерфейсом. Но вам все равно нужно знать, какой класс использовать в качестве фабрики. Вы также можете скрыть это, имея некоторую глобальную функцию, но вам все равно нужно знать ее имя и соглашения о вызовах.
CoCreateInstance идет дальше - он также скрывает фабричный класс и предоставляет общесистемную глобальную функцию. Все, что вы ему предоставляете, - это идентификатор класса, который является просто идентификатором GUID, и идентификатор интерфейса, который также является идентификатором GUID. Ты не
Проще говоря, он используется для создания экземпляра класса, который задается идентификатором GUID.
HRESULT CoCreateInstance(
__in REFCLSID rclsid, // which class you want
__in LPUNKNOWN pUnkOuter, // used in aggregation
__in DWORD dwClsContext, // how/where you want the object created
__in REFIID riid, // which of the object's interfaces you want to use
__out LPVOID *ppv // where the pointer to the created object is placed
);
Для получения дополнительной информации прочтите документацию .