ATL COM AppWizardを使用してCOMを作成しました。
そして、
IXXX *pXXX;
CoInitialize(NULL);
if (SUCCEEDED(CoCreateInstance(CLSID_XXXX, NULL,
CLSCTX_INPROC_SERVER, IID_IXXX,
(void **)&pXXX)))
{
pXXX->hoge();
pXXX->Release();
}
CoUninitialize();
というように、無事作成したCOMを呼び出すことが出来たのですが
作成したクラスのコンストラクタに引数を指定したいときは
どのように記述したらよいのでしょうか。
環境:Windows2000,VC++6.0
インスタンスの生成時に引数を渡す仕組がありませんので、
何らかの初期化メソッドを用意するしかありません。
if (SUCCEEDED(CoCreateInstance(CLSID_XXXX, NULL,
CLSCTX_INPROC_SERVER, IID_IXXX,
(void **)&pXXX)))
{
pXXX->initialize(引数);
pXXX->hoge();
pXXX->Release();
}
あるいは XXX を生成するクラスをこさえるです。
素のC++で書けば:
class XXX {
public:
XXX(int);
...
};
class XXXFactory {
public:
XXX* create(int n) { return new XXX(n); }
};
----
XXXFactory factory;
XXX* pxxx = factory.create(5);
出来ないということが知りたかったので
確認ができて良かったです。ありがとうございます。
初期化メソッドでなんとかすると思います。
επιστημηさんの方法はファクトリーパターンっていうんですかね。
これも良い方法ですね。