Я программист .NET и новичок в COM. Хотелось бы узнать простыми словами, что такое функция CoCreateInstance?
Какова точная функция CoCreateInstance?
Ответ 1
Вы можете придумать CoCreateInstance()
как интерфейс к анонимному классу factory.
В ООП часто бывает разумно использовать шаблон factory, чтобы просто вызвать метод создания и получить указатель/ссылку на интерфейс, не зная, какой именно класс находится за этим интерфейсом. Но вам все равно нужно знать, какой класс использовать как factory. Вы можете скрыть это тоже, имея некоторую глобальную функцию, но вам все равно нужно знать ее имя и соглашения о вызовах.
CoCreateInstance идет дальше - он также скрывает класс factory и предоставляет общесистемную глобальную функцию. Все, что вы предоставляете, это идентификатор класса - это всего лишь GUID - и идентификатор интерфейса, который также является идентификатором GUID. Вы не знаете, где реализована реализация и на каком языке она находится - COM имеет дело со всем, что при наличии в вашей системе COM-сервера, который содержит реализацию для указанного идентификатора класса, который предоставляет интерфейс для указанного идентификатора интерфейса.
Вы вызываете общесистемный глобальный CoCreateInstance(), он обнаруживает, что COM-сервер (или не работает) инициализирует его, просит его создать объект (может выйти из строя), извлекает указатель интерфейса на этот объект (может также не удаваться) и возвращает этот указатель интерфейса вам.
Ответ 2
Проще говоря, он использовал для создания экземпляра класса, класс указывался с помощью 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 interfaces you want to use
__out LPVOID *ppv // where the pointer to the created object is placed
);
Для получения дополнительной информации прочитайте документация.