- PR -

VC++.NET 2005でCLRからMFCを呼び出す

投稿者投稿内容
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-12-20 17:51
とりあえず、DoModalの戻り値を確認してみてください。
どのような値なのかは、MSDNをきちんと確認してください。


ちなみに、適当なActiveXコントロールがないので私は実際に試す
ようなことはやりませんので。
# なんか、簡単に出来るのであれば実験するかもしれない。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2006-12-20 18:35
DoModalの戻り値は-1でした。

MFCのソースの中を追っかけてみたら、dlgcore.cppの中の

BOOL CWnd::CreateDlgIndirect(LPCDLGTEMPLATE lpDialogTemplate,
CWnd* pParentWnd, HINSTANCE hInst)

メソッドの中の、

hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);
#ifdef _DEBUG
dwError = ::GetLastError();
#endif

で、hWhdにNULLがかえっているようでした。ただ、その直後のGetLastError()は
エラーは0を返しており、エラーがないような感じでした。

引き続き調べてみますが、なんかどつぼにはまりそう・・・



[ メッセージ編集済み 編集者: maru 編集日時 2006-12-20 18:36 ]
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-12-20 19:13
引用:

maruさんの書き込み (2006-12-20 18:35) より:
引き続き調べてみますが、なんかどつぼにはまりそう・・・


MFCのGUIクラスと、.NetFrameworkのGUIクラスを混在させた時点で、九割九分九厘どつぼにはまると思います。私ならそれ以上追わないです。

プログラマから見れば一つのダイアログクラスかもしれませんが、実際にはスパゲッティとかした巨大なフレームワークが背後で動いています。通常はスレッドに一つのメッセージループが動作してイベントを駆動させているわけですが、混在させるということは2つのメッセージループが動作しているわけで、この時点でゾっとします。その状態でMFCと.NET Frameworkのメッセージパッシングシステムが、双方とも問題なく共存するなんて到底思えません。MFCと.NET Fraemworkの双方に内部実装に精通しているなら、問題となる部分にパッチを当てたり、問題を起こすようなコーディングを避けられるかもしれませんが、私には到底無理です。だから設計の段階で避けます。

MFCアプリケーションから、.NETの非GUI系のクラスを使ったり、或いは逆に.NET FraemworkのGUIアプリケーションからCString等の非GUI系クラスを使うならともかく、両方のGUIを混在させるのは至難の業だと思います。

スキルアップ/キャリアアップ(JOB@IT)