Re: Вызов методов из COM-dll`ки
От: Tom Россия http://www.RSDN.ru
Дата: 09.07.03 14:04
Оценка:
Здравствуйте, Eugene Sh, Вы писали:

ES>У меня такая проблема.

ES>Есть COM`овская dll`ка, написанная на C++. Внутри dll`ки вызывается CoInitializeEx(NULL, COINIT_MULTITHREADED) — там необходимо использовать многопоточную модель.
ES>При вызове методов dll`ки из приложения, написанного на C++, всё нормально. А при вызове из приложения, написанного на VB, CoInitializeEx возвращает ошибку RPC_E_CHANGED_MODE — "cannot change thread mode after it is set".
ES>Вызов делается так:
ES>Dim a As Object
ES>Set a = CreateObject("XXX.XXX")
ES>a.TestCoInitEx

ES>Кто-нибудь сталкивался с этим? Как вызвать из VB методы многопоточной COM`овской dll`ки?

Проблемма возникает из за того, что VB уже инициализировал аппартамент как STA. Вызывать обьекты, находящиеся в MTA нужно так же как и те, которые в STA. т.е просто вызывать их, но не забыть их правильно зарегистрировать.

ЗЫ: Обычно при реализации обьекта в dll не надо вызывать CoInitialize так как CoInitialize обычно вызывает или клиент COM обьекта или подсистема COM не явно.
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.