2009-07-16 22 views
3

Evil Exchangeで既に尋ねられていますが、いつものように助けにはなりませんでした。私は今日、この問題を抱えている:ADOを使用してIntraWebでCoinitializeエラーを発生

IntraWebを使用して、スタンドアロンのWebアプリケーションを作成するときに、私は、ブラウザで私のアプリからのセッションをテストしようとしたとき、私はIDEでこの例外を取得:

$ 7C812A6Bでの最初のチャンスの例外。 例外クラスEOleSysErrorに というメッセージがあります。 'CoInitializeは と呼ばれていませんでした。プロセスWebContactManager.exe (1112)

私はIDEの例外ダイアログで "続ける" をクリックすると、ブラウザ自体がちょうど示しています

200 OK

を...むしろ私のメインフォームのコントロールよりも。

このエラーは、ADOをdbExpressやBDEなどの他のデータベースコンポーネントで置き換えた場合には発生していないようです。

私にこのエラーが表示され、どのように修正するのですか?

(注:私はD2007に組み込まれた「Web用VCL」IntraWebコンポーネントを使用しています)。

ご協力いただきありがとうございます!

答えて

7

the link you quotedで提供される「解決策」は、基本的に間違っているか、少なくとも不完全です。 ServerController.ComInitializationをciMultiThreadedに設定することによってのみ、IWはのスレッドでCOMが正しく初期化されることを保証します。

カスタムスレッドを作成する場合、Intrawebがカスタムスレッドについて認識していないので、自分自身でそのスレッドのCoInitializeを呼び出す必要があります(たとえば、Ajaxコールバックについて考える)。

+0

オラフ、入力いただきありがとうございます。私は "clMultiThreadedをtrue"に設定する場所は見当たりません.comInitializationをclMultiThreaded、clNone、またはclNormalに設定する場所だけです。前者に設定すると、私の直面する問題は解決され、カスタムスレッドは必要ありませんでした。 これらの(カスタムスレッド)でもポイントがありましたが、そのようなケースについていくつかの情報を見つけましたが、手動でCoInitializeを呼び出すタイミングと場所を十分に理解していません。 – Jamo

3

はちょうどこのhereへの答えが見つかりました: 全体の問題は Intrawebを使用してから発信として、私はよりエレガントな解決策を見つけた

を、私はむしろ にIntrawebを取得する私のためのCOMを初期化します。これはそれを並べ替えて うまくいきます。

あなたは 「ciMultiThreaded」にServerControllerでComInitialization プロパティを設定する必要があり 、IntrawebであなたのMS SQLのdbExpress ドライバまたはADOドライバを使用。

これにより、 "CoInitialize が呼び出されていない"というエラーがなくなります。

関連する問題