質問
構築を行っている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側をわかりやすく伝えたいこの作業?
解決
- を削除しCoClassからIDL
- を削除しCoClassからのテーブルオブジェクト(削除し、そのOBJECT_ENTRY_AUTO)
- のCNumberクラス
- コードのためのGetNumber(ュレーションのように:
*pVal = new CComObject<CNumber>(); (*pVal)->AddRef();
この方法ではありませんCoClassを、ユーザーや工場でのみ生み出される。
他のヒント
うまた間違ったものです---この答えに関連する質問から、サイドバーもなかなかできませんで検索しながらのお問い合わせいただく前に、問題...
その答えても満足はできません。
- 追加
noncreatable
のcoclassのIDL定義 - を削除し
OBJECT_ENTRY_AUTO
入力からのATLヘッダファイルの場合に発生するウィザード)
このMSDNの記事: http://msdn.microsoft.com/en-us/library/4tc639ss.aspx
所属していません StackOverflow