2013-11-09 20 views
6
スレッド内

は、 あるが違い私は、Delphi 7を使用私は推測のCoInitialize(NIL)とのCoInitializeEx(0、COINIT_MULTITHREADED)差

Coinitialize(nil) 

代わり

CoInitializeEx(0, COINIT_MULTITHREADED); 

の使用する場合他のプログラミング言語にも問題は残ることがあります ありがとうございました。

+4

あなたはCoInitialize' 'のドキュメントを読みましたか? –

+0

はい私はしましたが、それは明確ではありません – user382591

+2

おそらく、ドキュメントのどの部分で苦労しているのかを詳しく説明することができます。 –

答えて

11

前者は呼び出しスレッドを独自のシングルスレッドアパートメント(STA)にする方法でCOMを初期化します。後者は、呼び出しスレッドを共有マルチスレッドアパートメント(MTA)にする方法でCOMを初期化します。 2つのアパートメントは、特にスレッド境界を越えてCOMオブジェクトにアクセスする方法において、非常に異なるセマンティクスを持っています。異なるアパートメントのスレッドは、COMオブジェクトを共有するためにプロキシを使用する必要がありますが、COMはスレッドごとのメッセージキューを介して同期を提供します。同じアパートメントのスレッドは、プロキシを使用せずにCOMオブジェクトを共有できますが、クリティカルセクションやミューテックスなど、手動で同期する必要があります。

はい、違いがあり、非常に重要なことがあります。非常に詳細なMSDNのドキュメントをお読みください。

CoInitialize function

CoInitializeEx function

Processes, Threads, and Apartments

関連する問題