Мне нужно было создать в своей 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)
Здравствуйте 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