Проблема в том, что вы передаете UUID интерфейса вместо идентификатора класса в CreateIsntance()
.
Конечно, CreateInstance()
не будет работать при таком использовании - нет (обычно) COM-незащищенногокласс с тем же идентификатором, что и интерфейс.Кроме того, несколько классов могут реализовывать один и тот же интерфейс, поэтому, естественно, вы захотите передавать разные идентификаторы классов для одного и того же интерфейса.
Следовательно, вам необходимо иметь два параметра в вашей функции - интерфейс иидентификатор класса (или сам класс, из которого вы можете получить идентификатор класса, используя __uuidof
).
Также у вас есть серьезная проблема владения в вашем коде.Функция возвращает необработанный указатель, извлеченный из умного указателя, который уничтожается при возврате из функции.Скорее всего, это приведет к освобождению объекта и зависанию указателя.