0

ASP.NET アプリケーションがあり、VB6 コンポーネントを使用したいと考えています。ASPCOMPAT タグを使用する必要があることはわかっています。VB6 コードをスレッドセーフにするために必要なことはありますか?

いくつかのテストを実行しましたが、完全に機能しているように見えますが、問題が発生した開発者に関するコメントをここで読みましたが、コメントは詳しく説明されていません。スレッドセーフであることを保証するために VB6 コードに対して行う必要があることはありますか? 単純すぎるようです。また、ASPCONFIG タグを 1 つのページ (COM コンポーネントを使用するページ) だけに配置しました。

COM オブジェクトの周りに .NETwrapper を配置する tlbimport ツールを使用して、Visual Studio にコンポーネントをインポートしました。

4

1 に答える 1

1

VB6 コードのスレッド セーフは、その記述方法に大きく依存します。COM の特別な「サブセット」は、VB6 の時代に COM ベースの開発に関係したハードな配管作業のほとんどを隠すために書かれ、隠されているものの一部はスレッド管理 (マルチスレッド アパートメント、シングルスレッド アパートメントなど) でした。 VB6 ランタイムは内部でスレッド化を処理しました。その結果、ルールに従えば、スレッド セーフは多かれ少なかれ自動的に処理されます。

ほとんどの場合、Windows API 関数を呼び出して VB6/COM の "サンドボックス" の外側にスレッドを作成するなど、独立したスレッド管理を掘り下げようとした場合、火遊びをしていることになり、.NET 側からの保護は一切行われません。それは「スレッドセーフ」です。そうすることで、VB6 が意図的に隠そうとしたすべての内部スレッド管理/マーシャリング/その他のコードが壊れてしまいました。これが、アンマネージ (VB6/COM) とマネージ コード (.NET) の世界の違いの本質です。

それが役立つことを願っています。

于 2012-04-23T22:43:37.040 に答える