Возникла такая проблема: из КОМ-объекта нада передать ссылку на мой (конкретный интерфейс), а не IDispatch.
в IDL пишу ... [out, retval]<Мой интерфейс>** pVal МИДЛ мне говорит типа я не фига не знаю такого типа, ну я перенашу описания интерфейса объекта в описание библиотеки, тама вставляю importlib("myinterface.dll"). все типа пучком когда компилишь ИДЛину, но когда билдишь проект, то в сгенерированном МИДЛом хедернике компилер матерится на не описанный мой интерфейс.
Может если кто-то чё нить понял чё я тута написал, подскажет мне чё нить :)))
Здравствуйте Toughpheeckouse, Вы писали:
T>Доброго времени суток!
T>Возникла такая проблема: из КОМ-объекта нада передать ссылку на мой (конкретный интерфейс), а не IDispatch. T>в IDL пишу ... [out, retval]<Мой интерфейс>** pVal МИДЛ мне говорит типа я не фига не знаю такого типа, ну я перенашу описания интерфейса объекта в описание библиотеки, тама вставляю importlib("myinterface.dll"). все типа пучком когда компилишь ИДЛину, но когда билдишь проект, то в сгенерированном МИДЛом хедернике компилер матерится на не описанный мой интерфейс. T>Может если кто-то чё нить понял чё я тута написал, подскажет мне чё нить :)))
А свой интерфейс в IDL описан?
Здравствуйте Toughpheeckouse, Вы писали:
T>Доброго времени суток!
T>Возникла такая проблема: из КОМ-объекта нада передать ссылку на мой (конкретный интерфейс), а не IDispatch. T>в IDL пишу ... [out, retval]<Мой интерфейс>** pVal МИДЛ мне говорит типа я не фига не знаю такого типа, ну я перенашу описания интерфейса объекта в описание библиотеки, тама вставляю importlib("myinterface.dll"). все типа пучком когда компилишь ИДЛину, но когда билдишь проект, то в сгенерированном МИДЛом хедернике компилер матерится на не описанный мой интерфейс. T>Может если кто-то чё нить понял чё я тута написал, подскажет мне чё нить :)))
Может я, конечно, не очень хорошо Вас понял, но при попытке смоделировать ситуацию у меня все прошло без каких-либо проблемм. Я создал проект ATL EXE server, там сначала один интерфейс IMyInterface с единственным методом, возвращающим ссылку на этот интерфейс ([out, retval]IMyInterface** pRet), а затем второй интерфейс, возвращающий ссылку на тот-же IMyInterface. Ни в первом, ни во втором случае никаких проблем при построении проекта у меня не возникло: 0 warnings, 0 errors.
Здравствуйте Toughpheeckouse, Вы писали:
T>Доброго времени суток!
T>Возникла такая проблема: из КОМ-объекта нада передать ссылку на мой (конкретный интерфейс), а не IDispatch. T>в IDL пишу ... [out, retval]<Мой интерфейс>** pVal МИДЛ мне говорит типа я не фига не знаю такого типа, ну я перенашу описания интерфейса объекта в описание библиотеки, тама вставляю importlib("myinterface.dll"). все типа пучком когда компилишь ИДЛину, но когда билдишь проект, то в сгенерированном МИДЛом хедернике компилер матерится на не описанный мой интерфейс. T>Может если кто-то чё нить понял чё я тута написал, подскажет мне чё нить :)))
этот интерфейс (который нада вернуть) на самом деле не мой... т.е. из другова объекта и я его делаю importlib("myinterface.h")
Здравствуйте Toughpheeckouse, Вы писали:
T>этот интерфейс (который нада вернуть) на самом деле не мой... т.е. из другова объекта и я его делаю importlib("myinterface.h")
А почему ".H"?
importlib ведь импортит Type Library?
Здравствуйте Ростислав Глухов, Вы писали:
РГ>Здравствуйте Toughpheeckouse, Вы писали:
T>>этот интерфейс (который нада вернуть) на самом деле не мой... т.е. из другова объекта и я его делаю importlib("myinterface.h")
РГ>А почему ".H"? РГ>importlib ведь импортит Type Library?
РГ> importlib("stdole32.tlb"); РГ> importlib("stdole2.tlb"); РГ> importlib("MySuperLib.tlb");
Все правильно, видимо я выражаюсь непонятно.. ".h" это тот ашник, который генерится по идлене.. в прочем не важно уже, решение нашлось. если кому нить интересно могу предоставить решение.
Если это COM сервер, то ты можешь вернуть указатель на интерфейс IUnknown а потом получить любой другой интерфейс. (QueryInterface).
Потому что по концепции COM: можно получить любой интерфейс через любой другой у одного объекта.
Желаю удачи...
PS Правда может быть я не правильно понял твою проблему...