| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: ActiveX/СОМ/CORBA > TwebBrowser в DLL |
| Автор: ___Felix___ 14.1.2008, 19:50 | ||||||||||
| Всем доброго времени суток ;-) У меня проблема: при вставке в DLL компонента TWebBrowser выдается ошибка "Не был произведен вызов CoInitialize". Может я че не так делаю, но мои действия были таковы: 1) В Delphi 7 выбрал меню File - New - Other и DLL Wisard 2) File - New - Form 3) Cо вкладки Internet перетащил на форму объект WebBrowser 4) В коде формы объявил
5) В блоке implementation написал следующее
6) В файле проекта дописал
7) Откомпилировал проект 8) Открыл VS2003 и создал Win32 Console Application для Visual C/C++ 9) В папку с проектом скопировал DLL, полученную на шаге 7 10) Вот листинг сишной программы:
И после такого вот выскакивает сначала "Hello, DLL (begin)", а затем "Исключение неизвестное программное исключение (0x0eedfade) в приложении по адресу 0x7c81eb33." =( Попробовал удалить WebBrowser - все нормально. Пробовал в dll-ке делать так:
тогда выдавались сообщения "Hello, DLL (begin)", "Hello, DLL (Dialog was created)", а потом "Hello, DLL (end) failed = Не был произведен вызов CoInitialize" Люди, помогите с этим траблом. Всю программу ведь обламывает, а исправить можно - только не знаю как =( |
| Автор: hhhhhhhhhhhh 24.11.2008, 04:16 |
| Нашлось решение? Я вот делаю плагин для Оперы. Тоже в dll используется TWebBrowser, лежащий на форме. Нормально работает, но при выгрузке плагина тоже постоянно вылетает ошибка(AV). Если заменить TWebBrowser ЛЮБЫМ(!) контролом из VCL - все работает БЕЗ ошибок. Явно трабл в TWebBrowser, а где конкретно, не могу понять. Есть какие нибудь мысли хотябы, что может быть? Проверил вообще по простому: TForm1 = class(TPluginForm) ... protected WB: TWebBrowser; end; procedure TForm1.FormCreate(Sender: TObject); begin WB := TWebBrowser.Create(nil); end; procedure TForm1.FormDestroy(Sender: TObject); begin WB.Free; // после этого вылетает ошибка(AV) end; И даже так вылетает AV. Че за херня не могу понять. |
| Автор: Viy_2007 3.12.2008, 06:59 |
| а вызывать CoInitialize не пробовали? |
| Автор: hhhhhhhhhhhh 3.12.2008, 11:54 | ||||
Мда... "Тормозок, ты меня называла" Спасибо! Точно! С меня варенье! Добавил в конец модуля с формой:
Заработала!!! пс. Раз уж Делфи сама автоматичести следить за освобождение строк(тип String) и интерфейсов(IInterface и потомков), сдесь бы тоже автоматика не помешала Чайники всякие бывают |
| Автор: Akella 29.10.2010, 13:22 | ||||||
| Поднимаю тему, т.к. у меня схожая проблема. Есть поток (Thead), в нём только одна процедура Execute, где создаётся сам компонент браузера. Вот такой код
вот вызов
в модуле потока есть вызов:
D2007, Win7 Добавлено через 9 минут и 46 секунд По совету уважаемого Alexeis`а переместил CoInitialize(nil) и установил непосредственно перед вызовом строки создания браузера. Ошибка исчезла. |