Last Updated 2005/08/16
Visual C++ MFC OLE
OLEの初期化(チャートコントロール)
2005/08/16

ダイアログに MS チャートコントロールを貼り付けるとダイアログが表示されなくなる.
(この現象は DLL を作成する時に発生する)

デバッグウィンドウに AfxEnableControlContainer() を呼べと表示されるであろう.
しかし Application クラスの InitInstance() の先頭で
    AfxEnableControlContainer();

としても改善しない.
デバッグウィンドウには以下の様に表示される.
CoCreateInstance of OLE control {3A2B370C-BA0A-11D1-B137-0000F8753F5D} failed.


これは MFC のバグである.
DLL で AfxEnableControlContainer() を呼んでも OLE の初期化をしてくれない.
(EXE で呼べば初期化してくれる)

この場合は以下のうちどれかの処理を加える必要がある.


・EXE 側も MFC で書いているなら EXE の InitInstance() の先頭で

AfxOleInit();

か AfxEnableControlContainer() を呼ぶ.


・EXE 側が非 MFC なら プログラムの先頭で

OleInitialize( NULL );

プログラム終了時に

OleUninitialize();

を呼ぶ.


・EXE のソースを触れないならダイアログ表示の前とあとに処理を追加します.

OleInitialize(NULL);
CChartDlg dlg;
int rc = dlg.DoModal();
OleUninitialize();



本来 1 回だけ呼べばいいはずの処理なのだが.....


参照
前後のTips
OLEの初期化(チャートコントロール)

DSS ProgrammingTipsCGI Ver1.02