実質初めての書き込み
MFCを静的リンクしたときに起こる問題。
いままでVCで開発したことがなく、長いことはまってしまったので、メモをしておく。


始まりはランタイムエラー

DebugLibrary
Debug Assertion Failed!
Program:・・・
File:f:\sp\vctools\vc7libs\ship\atlmfc\include\afxwin1.inl
Line 24
・
・
・


下記のassertionで落ちていた。

_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
{ ASSERT(afxCurrentResourceHandle != NULL);
return afxCurrentResourceHandle; }


AfxGetResourceHandleを呼んでいるコードを探していくと、
CExceptionのGetErrorMessageにたどり着いた。


そこからどうしていいかわからずぐぐったら、
MFCの静的リンクに問題があるらしいことがわかった。
http://www.codeguru.com/forum/archive/index.php/t-249754.html


上記URLでは、ダイアログのよびだしで同じようなエラーが出ている。
原因は、静的リンクでMFCを使っているにもかかわらず、
GetErrorMessage@CExceptionが定義してあるオブジェクトを動的にリンクしていると、
実行環境が解釈してしまっていることにあると思われる。
違ってたらすいません。


自分がやった対策は、GetErrorMessage@CExceptionを定義しているDLLをリンクすること。
下記のようなコードをGetErrorMessageを呼び出す前に入れておく。

HINSTANCE hRes = NULL;
hRes = LoadLibrary("MFC42.DLL");
if(hRes)
   AfxSetResourceHandle(hRes);


せっかく静的リンクでMFCをよんでいるのに、動的リンクをしてしまっていることに挫折を感じるが、
静的ライブラリ中のCException(GetErrorMessage@CException?)を使う方法がわからないので、とりあえずこのままにしておく。


VCで初めて書いたコードで起こった問題だが、
同じようなことに行き当たった人がほとんどいないことに違和感を感じる。
自分のVCの設定に問題があるのだろうか。

自分がいじった設定は、

  • スタティック ライブラリで MFC を使用する
  • マルチ バイト文字セットを使用する

くらいだ。

はてなダイアリーへようこそ!

このページはあなた専用の日記(ブログ)です。*1

さっそく「日記を書く」をクリックして最初の記事を書いてみましょう。

はてなダイアリーの一番簡単な使い方を知りたい方は、以下の動画をご覧ください。

(再生ボタンをクリックすると、はてなダイアリーの使い方を音声と動画で見ることができます。)

はてなダイアリーのヘルプでは、このような動画を交えた使い方の説明や、文字の色の付け方、本やDVDを紹介する「はてな記法」の使い方を解説しています。

より詳しいはてなダイアリーの使い方を知りたい方は、以下のヘルプをご覧ください。


それでは、日々の出来事やテレビ番組の感想、普段考えていることなど、あなたならではの日記を書いて楽しんでください!

*1:この文章はサンプルです。実際に自分の記事を書くときには削除しても大丈夫です。