1

MSDN や一般的なインターネットを検索しても、答えが見つからないように見える 2 つの単純な COM IDL ファイルの質問:

  1. インターフェイスが STA オブジェクトによってのみ実装されるように指定できるインターフェイス属性はありますか? それとも、これはドキュメントだけの詳細ですか? [object, local]非リモート (インプロセス) COM オブジェクトに対して正しいと思われるものを既に持っています。

  2. voidメソッド宣言 (C など) の括弧内に引数を指定しない必要がありますか? MSDN はこれについて一貫性がありません。ヘッダファイルも同様です。このインターフェイスの私自身の個人的な実装は C で行います。

ありがとう。

4

1 に答える 1

1

COM コンポーネントに指定するスレッド モデルについて話しているのです。いいえ、それを IDL に入れることはできません。あまりにも重要です。クライアントは IDL を使用する必要はありません。たとえば、Javascript のようなスクリプト言語は決して使用しません。コンポーネントの CLSID キーで、レジストリに入る必要があります。ThreadingModel = "Apartment" で、クライアントに STA スレッドを提供するように要求します。欠落している場合、COM は既定でそれを想定します。

これは、クライアント プログラマーに提供を強制するものではないことに注意してください。彼が何らかの理由で MTA を好む場合、COM は STA スレッドを提供して、コンポーネントをセーフ ホームとして提供します。プロキシが遅すぎて使用できない場合は、ドキュメントが必要です。

いいえHRESULT Method(void)、IDL は必要ありません。使用するHRESULT Method()だけで十分です。Midl.exe は、使用する言語を気にしません。

于 2015-03-07T01:51:19.930 に答える