Здравствуйте The Lex, Вы писали:
TL>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
Значит это, что скорее всего, что ты не правильно используешь фабрику класса. Скорее всего ты делаешь:
1. CoCreateInstanceEx...
2. QueryInterface "Твой интерфейс"
а надо
1. CoCreateInstanceEx(...IID_IClassFactory...)
2. CF->CreateInstance(NULL,"Твой интерфейс",...)
Здравствуйте The Lex, Вы писали:
TL>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL. TL>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
Всегда E_NOINTREFACE будет возвращаться, если не зарегистрирована прокси/стаб или на машине сервера объекта или на машине клиента.
А IUnknown-то должна передать объект. Попробуй этот интерфейс. А потом через него QueryInterface на свой. Если будет та же ошибка — в этом и дело.
Здравствуйте The Lex, Вы писали:
TL>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
Скорее всего, проблема в маршалинге.
интерфейс помечен атрибутом "dual" или "oleatomation" ? если нет, то надо скомпилировать proxy/stub, чтобы был возможен маршалинг в другой процесс/другой хост
Здравствуйте Tom, Вы писали:
Tom>Здравствуйте The Lex, Вы писали:
TL>>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
Tom>Значит это, что скорее всего, что ты не правильно используешь фабрику класса. Скорее всего ты делаешь: Tom> 1. CoCreateInstanceEx... Tom> 2. QueryInterface "Твой интерфейс" Tom>а надо Tom> 1. CoCreateInstanceEx(...IID_IClassFactory...) Tom> 2. CF->CreateInstance(NULL,"Твой интерфейс",...)
Здравствуйте Vi2, Вы писали:
Vi2>Здравствуйте The Lex, Вы писали:
TL>>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL. TL>>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
Vi2>Всегда E_NOINTREFACE будет возвращаться, если не зарегистрирована прокси/стаб или на машине сервера объекта или на машине клиента.
Vi2>А IUnknown-то должна передать объект. Попробуй этот интерфейс. А потом через него QueryInterface на свой. Если будет та же ошибка — в этом и дело.
Да, точно так! IUnknown получаю, потом запрашиваю свой — снова E_NOINTERFACE. Хорошо, попробую прокси/стаб...
Здравствуйте The Lex, Вы писали:
TL>Что бы это могло значить? :???: Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
скорее всего не зарегистрирована proxy/stub dll. но в таком случае IUnknown возвращается а на все остальные интерфейсы выдается E_NOINTERFACE
Vi2>Таким путём класс-фактори не получают н-и-к-о-г-д-а. CoCreateInstance служит для получения экземпляра объекта.
Видать старею
Хотя точно помню, что когда то мне именно так и приходилось делать.
Ну, на то Вы и George_Seryakov, а я — просто The Lex.
Мне мой метод больше нравится потому, что я лучше вижу, что чему присваивается — это раз. А два: имя сервера все ж предполагается задавать не внутре кода, а извне оного, тобишь от юзера исходяще. Но я учту! Для заполнения массива MILTI_QI это и правда посимпатишнее будет. Хотя...
Вместо CLSCTX_ALL для удаленного создания надо использовать CLSCTX_REMOTE_SERVER, при исользовании CLSCTX_ALL, CoCreateInstanceEx создает объект на локальном компе (если конечно объект на локальном компе зареген тоже).
DG>Вместо CLSCTX_ALL для удаленного создания надо использовать CLSCTX_REMOTE_SERVER, при исользовании CLSCTX_ALL, CoCreateInstanceEx создает объект на локальном компе (если конечно объект на локальном компе зареген тоже).
А потом догоняет и еще раз создает. Прошу прощения: поздно уже, спать иду, а тут такой постинг. Сервер для запуска... хм... DCOM-сервера определяется в ServerInfo.pwszName... Пробовал: точно работает. Называть локальный "LOCALHOST" не пробовал: может завтра попробую...
TL>А потом догоняет и еще раз создает. Прошу прощения: поздно уже, спать иду, а тут такой постинг. Сервер для запуска... хм... DCOM-сервера определяется в ServerInfo.pwszName...
В некоторых случаях это имя не смотрится...
Трабла была такая:
есть InProc-объект, который при создании поднимает exe-singleton.
Так вот если при создании inproc-объекта на другом компе указать CLSCTX_ALL, то exe-singleton поднимается на локальном компьютере.
Если указывать CLSCTX_REMOTE_SERVER, то все нормально, exe-singleton поднимается там, где ему и положено, на другом компе.
TL>Пробовал: точно работает. Называть локальный "LOCALHOST" не пробовал: может завтра попробую...
Здравствуйте DarkGray, Вы писали:
DG>Здравствуйте The Lex, Вы писали:
TL>>А потом догоняет и еще раз создает. Прошу прощения: поздно уже, спать иду, а тут такой постинг. Сервер для запуска... хм... DCOM-сервера определяется в ServerInfo.pwszName...
DG>В некоторых случаях это имя не смотрится...
DG>Трабла была такая: DG>есть InProc-объект, который при создании поднимает exe-singleton.
DG>Так вот если при создании inproc-объекта на другом компе указать CLSCTX_ALL, то exe-singleton поднимается на локальном компьютере.
DG>Если указывать CLSCTX_REMOTE_SERVER, то все нормально, exe-singleton поднимается там, где ему и положено, на другом компе.
К сожалению, весьма смутно представляю себе, что такое "singleton"... Завтра займусь RTFM. А пока, можно я Экслера дочитаю и спать пойду, а?
Здравствуйте The Lex, Вы писали:
TL>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
инитерфейс не зарегистрирован ... вот в чем проблемка то ...
покажи как совй idl файл для COM сервера ... покажешь — узнаешь в чем проблема
Здравствуйте Kef, Вы писали:
Kef>Здравствуйте The Lex, Вы писали:
TL>>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
Kef>инитерфейс не зарегистрирован ... вот в чем проблемка то ...
Kef>покажи как совй idl файл для COM сервера ... покажешь — узнаешь в чем проблема
Только проблема уже решилась сбором proxy/stub DLL и ее регистрацией. Только что всплыла новая, после чего компиляция proxy/stub была записана в Custom Build и более не "возникала".
Здравствуйте The Lex, Вы писали:
TL>Здравствуйте Kef, Вы писали:
Kef>>Здравствуйте The Lex, Вы писали:
TL>>>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>>>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...
Kef>>инитерфейс не зарегистрирован ... вот в чем проблемка то ...
Kef>>покажи как совй idl файл для COM сервера ... покажешь — узнаешь в чем проблема
TL>
TL>Только проблема уже решилась сбором proxy/stub DLL и ее регистрацией. Только что всплыла новая, после чего компиляция proxy/stub была записана в Custom Build и более не "возникала".
Ну да ... именно в этом то вся проблема и была судя по потому как у тебя объявлен интерфейся ... IUnknown как базовый ... стандартный маршалинг ... раньше тоже удивлялся таким вот ошибкам
Здравствуйте, The Lex, Вы писали:
TL>Что бы это могло значить? Сам я ничего не нашел — это мой первый DCOM-сервер на ATL.
TL>Сервер скомпонован как сервис. Если нужна будет дополнительная информация — отвечу...