2012-04-23 16 views
0

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

私はいくつかのテストを実行しましたが、完全に機能するようですが、問題にぶつかった開発者についてここでコメントを読んでいますが、コメントは詳しく述べられていません。スレッドセーフであることを保証するためにVB6コードに行う必要のあることはありますか?それはあまりにも単純なようです。また、私はASPCONFIGタグを1ページのみに配置しました。これはCOMコンポーネントを使用するページです。

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

答えて

1

VB6コードのスレッドセーフは、その記述方法に大きく依存します。 COMの特別な「サブセット」は、VB6でCOMベースの開発に関わるハードプラントの大半を隠すために書かれたもので、スレッド管理(マルチスレッドアパートメント、シングルスレッドアパートメントなど)、 VB6ランタイムはボンネットの下でスレッディングを処理しました。その結果、あなたがルールに従えば、スレッドの安全性は多かれ少なかれあなたの世話をしました。

ほとんどの場合、VB6/COM「サンドボックス」の外にスレッドを作成するためにWindows API関数を呼び出すなど、独立したスレッド管理を調べようとすると、火災でプレイしていましたが、 NET側はそれを "スレッドセーフ"にします。そうすることで、VB6が意図的に隠そうとした内部スレッド管理/マーシャリング/ etcコードがすべて破損してしまいました。これは、アンマネージド(VB6/COM)とマネージコード(.NET)の違いの本質です。

希望に役立ちます。

+0

ありがとうございました。 VB6 DLLは、クラスとスレッドを使用して比較的うまく構築されました。したがって、あなたが言ったことに基づいて、問題はないはずです。 ASP.NETアプリケーションで再利用したい機能は1つだけです。 – w0051977

関連する問題