質問

構築を行っているATL型図書館タイプのクラス工場とする。何か新お疲ようになります:

[ object, uuid(...), ... ]
interface INumber : IDispatch {
    [propget, id(0)] HRESULT Value([out, retval] LONG* pVal);
}

[ object, uuid(...), ... ]
interface INumberFactory : IDispatch {
    [id(1)] HRESULT GetNumber([in] BSTR numberName, [out, retval] INumber* pVal);
}

[ uuid(...) ]
coclass NumberFactory {
    [default] interface INumberFactory;
}

ユーザーからのインスタンスを実装するクラス INumber インタフェースの NumberFactory.

これでもうまくいくが、もっとできないのでよいのかを定義し、インスタンス化はATLのオブジェクトが返され、 NumberFactory.GetNumber() 方法。合を定義し番号を、IDLのようになります:

[ uuid(...) ]
coclass One {
    [default] interface INumber;
}

One coclassできるインスタンスを生成します。いつづけたいと思っています制限するもので唯一の方法でのインスタンスを取得します One coclassは呼び出 NumberFactory.GetNumber("One").

このような中、私の質問はどうIDLの書き込まれるので、ユーザーのインスタンス化できない One, ができるものインスタンスを生成する One 内からその NumberFactory coclassに戻る INumber インタフェース One ユーザー?

また、あなたが特別なことをしていただくことが求のATL側をわかりやすく伝えたいこの作業?

役に立ちましたか?

解決

  1. を削除しCoClassからIDL
  2. を削除しCoClassからのテーブルオブジェクト(削除し、そのOBJECT_ENTRY_AUTO)
  3. のCNumberクラス
  4. コードのためのGetNumber(ュレーションのように:
*pVal = new CComObject<CNumber>();  
(*pVal)->AddRef();

この方法ではありませんCoClassを、ユーザーや工場でのみ生み出される。

他のヒント

うまた間違ったものです---この答えに関連する質問から、サイドバーもなかなかできませんで検索しながらのお問い合わせいただく前に、問題...

その答えても満足はできません。

  1. 追加 noncreatable のcoclassのIDL定義
  2. を削除し OBJECT_ENTRY_AUTO 入力からのATLヘッダファイルの場合に発生するウィザード)

このMSDNの記事: http://msdn.microsoft.com/en-us/library/4tc639ss.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top