Запуск СОМ сервера в дочернем потоке
От: Аноним  
Дата: 27.04.05 11:23
Оценка:
Создаю дочерний поток. В него передаю ссылку на интерфейс сервера (IDispatch) из главного потока. Когда вызываю метод Invoke выдаёт ошибку с текстом, неизвестная ошибка. Когда вызываю их главного потока, то всё нормально. В чём грабли???
Re: Запуск СОМ сервера в дочернем потоке
От: distinger  
Дата: 27.04.05 11:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Создаю дочерний поток. В него передаю ссылку на интерфейс сервера (IDispatch) из главного потока. Когда вызываю метод Invoke выдаёт ошибку с текстом, неизвестная ошибка. Когда вызываю их главного потока, то всё нормально. В чём грабли???


CoInitialize в потоке надо вызвать
Re[2]: Запуск СОМ сервера в дочернем потоке
От: Аноним  
Дата: 27.04.05 11:40
Оценка:
Здравствуйте, distinger, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


А>>Создаю дочерний поток. В него передаю ссылку на интерфейс сервера (IDispatch) из главного потока. Когда вызываю метод Invoke выдаёт ошибку с текстом, неизвестная ошибка. Когда вызываю их главного потока, то всё нормально. В чём грабли???


D>CoInitialize в потоке надо вызвать


И возможно еще интефейс маршалить
Re: Запуск СОМ сервера в дочернем потоке
От: Danchik Украина  
Дата: 27.04.05 14:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Создаю дочерний поток. В него передаю ссылку на интерфейс сервера (IDispatch) из главного потока. Когда вызываю метод Invoke выдаёт ошибку с текстом, неизвестная ошибка. Когда вызываю их главного потока, то всё нормально. В чём грабли???


Скорее всего тебе придется использовать Global Interface Pointer.

Почитай вот тут Marshal interface pointers across apartments

Скачай себе ComLib.pas (дочитаеш до конца статьи будет линка).
Создай TGIP.Create (aUnk, IDispatch) в основном потоке, передай GIP в дочерний поток.
Используй TGIP.GetIntf в дочернем потоке чтоб взять свой IDispatch
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.