CoCreateInstance?
От: op  
Дата: 05.10.01 11:34
Оценка:
Здравствуйте уважаемые...
Проблем в следующем.
Есть EXE — COM сервер в нем есть некий интефейс IExeServer, есть клиент который вызывает CoCreateInstance хотим получить интерфейс IExeServer передаю сформированный MIDL-ом IID_IExeServer и получаю в ответ E_NOINTERFACE.
Где я не прав.
Re: CoCreateInstance?
От: Willi  
Дата: 05.10.01 12:02
Оценка:
Здравствуйте op, Вы писали:

op>Здравствуйте уважаемые...

op>Проблем в следующем.
op>Есть EXE — COM сервер в нем есть некий интефейс IExeServer, есть клиент который вызывает CoCreateInstance хотим получить интерфейс IExeServer передаю сформированный MIDL-ом IID_IExeServer и получаю в ответ E_NOINTERFACE.
op>Где я не прав.

proxy/stub DLL или typelib нужен, чтоб данные маршаллить.
Если ты писал интерфейсы на IDL то и то и другое можно получить используя MIDL.

А может ты просто забыл зарегистрировать proxy/stub?
\/\/i||i
Re: CoCreateInstance?
От: IT Россия linq2db.com
Дата: 06.10.01 03:27
Оценка:
Здравствуйте op, Вы писали:

op>Есть EXE — COM сервер в нем есть некий интефейс IExeServer, есть клиент который вызывает CoCreateInstance хотим получить интерфейс IExeServer передаю сформированный MIDL-ом IID_IExeServer и получаю в ответ E_NOINTERFACE.

op>Где я не прав.

Надо передавать не IID_IExeServer, а CLSID_ExeServer.
Первый параметр CoCreateInstance принимает гуид кокласса, грубо говоря — класса объекта. Четвёртый параметр принимает гуид интерфейса (IID_IExeServer), т.к. кокласс может иметь несколько интерфейсов. В реестре хранится описание класса, поэтому функция вполне законно выдаёт ошибку.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: CoCreateInstance?
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.10.01 18:31
Оценка:
Здравствуйте Willi, Вы писали:

W>proxy/stub DLL или typelib нужен, чтоб данные маршаллить.

W>Если ты писал интерфейсы на IDL то и то и другое можно получить используя MIDL.

W>А может ты просто забыл зарегистрировать proxy/stub?


Да. Похоже Willi прав. Дело в прокси. Проверить мжно так: запрашиваешь IUnknown* и если он получается, то дело именно в прокси.

Чтобы не возиться с прокси лучше создавая интерфейс делать его дуальным или помечать атрибутом oleautomation. При этом (естественно) надо испльзовать только automation-совместимые типы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: CoCreateInstance?
От: op  
Дата: 10.10.01 12:29
Оценка:
Здравствуйте op, Вы писали:

op>Здравствуйте уважаемые...

op>Проблем в следующем.
op>Есть EXE — COM сервер в нем есть некий интефейс IExeServer, есть клиент который вызывает CoCreateInstance хотим получить интерфейс IExeServer передаю сформированный MIDL-ом IID_IExeServer и получаю в ответ E_NOINTERFACE.
op>Где я не прав.

А разве TypLib не регистрится автоматически при компиляции проекта?
Re[2]: CoCreateInstance?
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.01 23:46
Оценка:
Здравствуйте op, Вы писали:

Отвечать на свое же сообщение не разумно. Отвечающие не получат уведомление...

op>Здравствуйте op, Вы писали:


op>>Здравствуйте уважаемые...

op>>Проблем в следующем.
op>>Есть EXE — COM сервер в нем есть некий интефейс IExeServer, есть клиент который вызывает CoCreateInstance хотим получить интерфейс IExeServer передаю сформированный MIDL-ом IID_IExeServer и получаю в ответ E_NOINTERFACE.
op>>Где я не прав.

op>А разве TypLib не регистрится автоматически при компиляции проекта?



Так это зависит от проекта. ATL-визард делает кастом-билд-степ который действительно вызывает регистрацию сервера, при которой и регистрируется ТЛБ. Если проект создан как то по другому, то не факт. К тому же ваша ТЛБ может быть не совместима с олеатомэйшон. И E_NOINTERFACE очень часто является следствием этого.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.