2009-07-16 2 views
3

Уже задан на Evil Exchange, но, как всегда, это не помогло. Я с этой проблемой сегодня:Ошибка Coinitialize на IntraWeb с использованием ADO

При создании самостоятельный веб-приложения с помощью IntraWeb, я получаю это исключение в IDE, когда я пытаюсь проверить сеанс из моего приложения в браузере:

Первое случайное исключение - $ 7C812A6B. Класс исключений EOleSysError с Сообщение 'CoInitialize не было , называемое'. Процесс WebContactManager.exe (1112)

Если я нажимаю "продолжить" в диалоговом окне IDE исключений, сам браузер просто показывает:

200 OK

... скорее чем элементы управления в моей основной форме.

Эта ошибка не возникает при замене ADO другими компонентами базы данных, такими как dbExpress или BDE.

Что это за ошибка, говорящая мне, и как ее исправить?

(Примечание. Я использую запасные компоненты «VCL для Интернета», входящие в комплект поставки, с D2007).

Заранее благодарим за любую помощь!

ответ

7

«Решение», представленное в the link you quoted, в основном неправильное или, по крайней мере, неполное. Только установив ServerController.ComInitialization на ciMultiThreaded в true IW будет гарантировать, что каждый поток получит COM-инициализацию правильно. (например, подумайте об обратных вызовах Ajax)

Если вы создаете свои собственные потоки, вам придется называть CoInitialize для этого потока самостоятельно, хотя, поскольку Intraweb не знает о ваших пользовательских потоках.

+0

Olaf, спасибо за ввод. Я не вижу места для установки «clMultiThreaded to true» - только место для установки ComInitialization для clMultiThreaded, clNone или clNormal. Устанавливая его в первую очередь, решайте мою непосредственную проблему, которая не связана с настраиваемыми потоками. Точка, отмеченная на этих (пользовательских потоках), и я нашел некоторую информацию о таких случаях, но все еще не понимаю, когда и где следует коллиментировать вручную. – Jamo

3

Просто найти ответ на этот here:

Я нашел более элегантное решение, как вся проблема возникла с использованием IntraWeb, я скорее получить IntraWeb к инициализирует ком для меня. Это хорошо выглядит .

При использовании драйвера MS SQL DBEXPRESS или драйвер ADO с IntraWeb, вы должны установить свойство ComInitialization в ServerController к 'ciMultiThreaded.

Это устраняет ошибку «CoInitialize ».

Смежные вопросы