- - PR -
マルチスレッドでのActiveXコントロールの利用
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-22 03:52
あるActiveXコントロールをVC#で利用しようと思っています。
このコントロールのVC++6.0用のドキュメントを見ると --------------------------------------------------------------------- (1) STAモデルです。 (2) インタフェースポインタを他のアパートメントに渡す場合,インタフェースポ インタをマーシャリングする必要があります。 COM関数のCoMarshallerThreadInterfaceInStream, CoGetInterfaceAndReleadseStreamを使用して同期をとってください。 --------------------------------------------------------------------- とあるのですが、C#で利用するにはP/Invokeでこれらの関数を使う以外には方法は 無いのでしょうか? 環境 Windows2000 Access 2003 Visual C# 2005 Express Edition | ||||||||
|
投稿日時: 2006-10-22 06:58
ActiveX コントロールなら(AxHogehoge.dll がラッパになってるのなら)、普通にメインスレッドで作成して、別スレッドから操作する時は Invoke メソッドを経由して、というので十分だと思いますが。 | ||||||||
|
投稿日時: 2006-11-05 23:54
スレッドが起こされるごとにスレッド内でCOM オブジェクトを作成し
COM インターフェイスにキャストしています。 また、VC++6.0用のドキュメントにSTAモデルです。 とあるので スレッドのアパートメントはSTAに設定しています。 このような操作は 「インタフェースポインタを他のアパートメントに渡す場合,インタフェースポ インタをマーシャリングする必要があります。 」 を満足しているのでしょうか? | ||||||||
|
投稿日時: 2006-11-06 15:07
どちらとも言えません。 てか、関係ないです。 「」内の説明は、COM オブジェクトのインターフェースポインタをスレッド境界をまたいで引き渡す場合の規約について論じています。
ということなら、新しく起動したスレッド内ですべての操作が完結しているので、「COM オブジェクトのインターフェースポインタをスレッド間で引き渡す」ような操作は発生していません。 [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-11-07 08:38 ] |
1