Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DCOM многопоточность

1.8K
13 октября 2008 года
Arkady
153 / / 18.12.2007
Здравствуйте,

DCOM, установил параметры на закладке Project->Options->ATL) с параметрами:
Instancing: Multiple use (потому что это должно означать, что несколько клиентов одновременно могут работать с сервером)

OLE Initialization COINIT_xxxx Flag: APARTMENTTHREADED
(есть ещё MULTITHREADED, но этот вариант должен означать, что для каждого клиента создается его собственный экземпляр объекта сервера)

Threading Model: Free (потому что каждый клиент может создавать множество потоков, каждый из которых должен уметь работать с клиентским экземпляром сервера)

Действительно, если я создаю 2 клиента, каждый из них работает со своим экземпляром сервера, но вот если я в клиенте создаю второй поток, который пытается "дернуть" метод сервера, HRESULT возвращает "CO_E_NOTINITIALIZED".

Как быть? Как надо расставить флаги (при создании нового проекта, или в уже имеющемся), чтобы каждый клиент (процесс) цепляющийся к серверу получал свой экземпляр объекта сервера, но клиенты могли дергать методы своего экземпляра из разных потоков?
1.8K
14 октября 2008 года
Arkady
153 / / 18.12.2007
вот эта статья:
http://www.podgoretsky.com/ftp/Docs/Delphi/DX/COMmodel.html

очень неплохо рассказывает, что к чему, но мне всё равно нужна помощь специалиста =(
1.8K
15 октября 2008 года
Arkady
153 / / 18.12.2007
Неужели никто не знает? :(

Захожу в Билдер. Создаю новый Application. Добавляю в него Automation Object. Устанавливаю ему Threading model: Free. Даю ему пару методов.

Делаю клиент, обращающийся к нему. Всё компилится. Работает. Создаю у клиента второй поток - методы не дергаются. Возвращает ошибку "CO_E_NOTINITIALIZED". Понятно, добавляю CoInitialize(NULL) в начало и в конце CoUninitialize(). Возвращает ошибку RPC_E_WRONG_THREAD.

Точно так же себя ведет, если я создаю сервер с Threading model: Apartment.

Что я делаю не так? :(

Интернет предлагает добавлять методы CoMarshalInterThreadInterfaceInStream и обратный, которые я вообще не понимаю, кроме того, на этом форуме они поиском вообще не находятся. Как быть? :(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог