私は、VS2012 を使用して Windows をターゲットとする SDL アプリケーションに取り組んでいます。
私は次のことをしたい: - ファイルを開くダイアログを持っている - ファイルを名前を付けて保存ダイアログを持っている
これを行うために、次のような関数をいくつか実装しました。
#include <afxdlgs.h>
/// This function gets a path to save a file to from the user
/// \return true if function succeeds, false otherwise
/// \param pPath String to save path in
/// \param name default file name
/// \param extensions default file extensions separated by |
/// "Text File (*.txt)|*.txt|Document File (*.doc)|*.doc|All Files(*.*)|*.*||"
bool Prompt::fileOpen( std::string * pPath, const std::string & defaultName, const std::string & defaultExtension, const std::string & extensions )
{
//return false;
CFileDialog dlg(
true, // true for File Open dialog box
defaultExtension.c_str(), // The default file name extension
defaultName.c_str(), // The default file name
OFN_FILEMUSTEXIST | OFN_NOCHANGEDIR, // bunch of flags http://msdn.microsoft.com/en-us/library/wh5hz49d.aspx
extensions.c_str()
);
auto result = dlg.DoModal();
if(result != IDOK) return false; // failed
pPath->assign(dlg.GetPathName());
return true;
}
残念ながら、これによりデバッグ時にコンパイルの問題が発生します。MFC アプリケーションを /MD[d] (CRT dll バージョン) でビルドするには、MFC 共有 dll バージョンが必要です。_AFXDLL を #define するか、/MD[d] を使用しないでください
したがって、[構成] > [一般] > [MFC の使用] の下で、「共有 DLL で MFC を使用する」に設定します。
これでコンパイルできますが、期待どおりに動作しません。
実行時例外が発生します。
App.exe の 0x51A9A072 (mfc110d.dll) で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000000。
winmain.cpp 28行目
if (!pThread->InitInstance())
基本的に pThread は nullptr です
のインクルードを削除すると、
#include <afxdlgs.h>
私のアプリは期待どおりに機能します。
この問題を解決する方法がわかりません。
ありがとう