以前Winxp+VS2003で作成し正常に動作していたコードを、Win7+VS2012(update4適用済み)
で再コンパイルしWin7上で実行したところ、CDBExceptionがスローされずにAPPCRASHと
なってしまいます(Winxp+VS2003ではスローされていた)。設定が間違っているのでしょう
か?対応策をご存知の方がおられましたら、お手数ですがご教授いただけませんでしょう
か。
テストコード(抜粋)
#include <afxdb.h>
CDatabase db;
try
{
db.OpenEx(ABCD,CDatabase::noOdbcDialog);
// ABCDが未設定の場合、CDBExceptionがスローされるはず
// SQLを発行しデータを抽出
}
catch(CDBException* e)
{
// ODBC設定未完の場合の処理
e->Delete();
}
Win7+VS2012 update4で、MFCのコードを追っていくと分かりますが、例外が発生した時
に2重開放しています。
ライブラリ内部の話で私は対応策が思いつかなかったので、低レベルAPIを用いてMFCを
使わないようにしました。
ARさん レスありがとうございます、遅くなり申し訳ありません。
おっしゃるとおり、2重開放時にこけておりました。LocalFreeの解説にアクセス違反の
例外(EXCEPTION_ACCESS_VIOLATION)が発生することがあるとなっていますので、当然の
結果のようです。
MFCのバグのようなので、マイクロソフトさんに何とかしてもらいたいです。
今回、私もAPIにて対応しましたが、APIでのODBCプログラミングは初めてでしたので、か
なり手惑いました。