AFX_MANAGE_STATE
今まであまり意識していなかったけど、このマクロがどのように作用するのか今日ちょっぴり理解した。
今の作業で、複数バージョンのVC++でコンパイルできるようにソリューションを用意しているんですが、VC++2008で一式ビルドした後にVC++2010で1つのアプリケーションだけビルドして実行した場合、EXE側とDLL側で使っているMFCのバージョンが異なる組み合わせになる。このような場合に、MFCのグローバル変数にアクセスするような関数を呼び出すと、バージョン不整合で落ちる。
今の構成では、MFC拡張DLLとして作成しているので、EXEとDLLは同じMFCバージョンになっていないといけないのに、バイナリを入れ替えないままでビルドしてしまって、変な挙動になって1時間も時間を無駄にした。
で、MFC拡張DLLではなくてMFC共有DLLにした場合、AFX_MANAGE_STATEマクロを呼び出せば、異なるMFCバージョンでもうまく処理してくれるようになる。ですけどもAfxGetAppName()をDLL内から呼び出したら、DLLのプロジェクト名が返ってくるのでEXEの名前は取得できない。結局使えない。
プロジェクト毎に*.cppを取り込んで使っている設定になっていてDLLにしたらいいんじゃね?と思って変えたんだけど、プロジェクト単位で開発環境が異なる場合にはソースコードを取り込んだ方が良いかもなぁ。