Реализация Apartment в DLL (in-proc Apartment)
От: AlexandrShch  
Дата: 24.01.02 05:51
Оценка:
Мне нужно было создать в своей ActiveX DLL цикл обработки сообщений.
При создании объекта в DLL создается поток.
Вроде все сделал правильно: и маршалинг, и синхронизацию CreateInst. ит.д.
И вроде даже по ACtiveX интерфейсу все работает.
Но возник один глюк:
ActiveX содержит Rich control, и возникает 0xC0000005 Access Violation в его оконной процедуре. Причем под 2000 еще как то живет, а под 98 валится.

Я слышал что MS не рекомендует использовать in-proc Apartment. Это связано с доступом к одним ресурсам из разных потоков. В принципе это похоже на правду: обработка оконой процедуры формируется в отдельном потоке, может при этом возникает Access Violation.

ActiveX сделан с использованием ATL-WTL, и в нем вроде все правильно.
Может кто знает подробности — в чем тут дело?
Re: Реализация Apartment в DLL (in-proc Apartment)
От: Snax Россия  
Дата: 24.01.02 07:55
Оценка:
AS>Может кто знает подробности — в чем тут дело?

Из приведенного выше трудно понять, что имеено не работает.
Советую зайти на сайт http://www.rsdn.ru в раздел статьи/COM-DCOM-COM+,
просто почитать о том, что как устроены подразделения (apartments).
Вот хорошая статья: http://www.rsdn.ru/article/?com/COM_TnC/COM_TnC.xml
Автор(ы): Чистяков В.Ю.
Re: Реализация Apartment в DLL (in-proc Apartment)
От: Резник Андрей Борисович Россия  
Дата: 24.01.02 10:41
Оценка:
Здравствуйте AlexandrShch, Вы писали:

AS>Мне нужно было создать в своей ActiveX DLL цикл обработки сообщений.

AS>При создании объекта в DLL создается поток.
AS>Вроде все сделал правильно: и маршалинг, и синхронизацию CreateInst. ит.д.
AS>И вроде даже по ACtiveX интерфейсу все работает.
AS>Но возник один глюк:
AS>ActiveX содержит Rich control, и возникает 0xC0000005 Access Violation в его оконной процедуре. Причем под 2000 еще как то живет, а под 98 валится.
А InitRichEditCtrl() вызывал при создании окна? /*sorry, не помню точно, как эта функция называется*/. Посмотри MSDN, там должно быть написано, надо ли его вызывать один раз на все приложение, или для каждого потока.

WBR, Andrey Reznik (2:5020/2999, Andrey_Reznik@rambler.ru)
Moderator of RU.COM.ACTIVEX
WBR, Andrey Reznik (2:5020/2999, Andrey_Reznik@rambler.ru)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.