0

IDL で次のような作成不可能なコクラスを宣言する理由は何ですか?

[
    uuid(uuidhere),
    noncreatable
]
coclass CoClass {
    [default] interface ICoClass;
};

とにかく、そのようなクラスはCOMに登録されないということです。IDL ファイルと、その IDL ファイルをコンパイルすることによって生成されるタイプ ライブラリでそれを言及する理由は何ですか?

4

2 に答える 2

2

作成不可能な属性は、オブジェクトのコンシューマーへの単なるヒントです。たとえば、.NetおよびVB6は、この属性を表示すると、クライアントがオブジェクトを「通常の方法」で作成することを許可しません。たとえば、New CoClass()を呼び出します。 [VB6]。

ただし、COMサーバーのクラスファクトリは、特定のクラスのオブジェクトの作成を許可するかどうかを決定するための明確な権限です。したがって、実際には、クラスが作成不可とマークされている可能性がありますが、クラスファクトリはオブジェクトを作成できます。作成した。このような状況を回避するには、それに応じてクラスファクトリを更新してください。

IDLで作成できないクラスに言及することは、実際にはオプションです。ただし、とにかくそれらを含めることで少なくとも1つの利点が得られることに注意してください。midlはCLSID_CoClass定数などを作成します。

于 2009-05-01T07:33:32.097 に答える
2

noncreatable は、クライアントがデフォルトのクラス ファクトリでオブジェクトをインスタンス化するのを止めたいが、ログやデバッグ用に適切な CLSID を保持したい場合に適しています。http://www.eggheadcafe.com/software/aspnet/29555436/noncreatable-atl-object.aspxで、適切に解決された問題の例を参照してください。

于 2009-04-30T14:42:51.717 に答える