我正在开发一个 SDL 应用程序,使用 VS2012,针对 Windows。
我想做以下事情: - 有一个文件打开对话框 - 有一个文件另存为对话框
为此,我实现了一些这样的功能:
#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;
}
现在不幸的是,这会导致调试时出现编译问题:使用 /MD[d](CRT dll 版本)构建 MFC 应用程序需要 MFC 共享 dll 版本。请#define _AFXDLL 或不要使用 /MD[d]
因此,在配置 > 常规 > 使用 MFC 下,我将其设置为“在共享 DLL 中使用 MFC”
现在它可以编译,但不能按预期工作。
我得到一个运行时异常:
App.exe 中 0x51A9A072 (mfc110d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。
winmain.cpp 第 28 行
if (!pThread->InitInstance())
基本上 pThread 是一个 nullptr
请注意,如果我删除包含
#include <afxdlgs.h>
我的应用程序的 fileOpen 函数按预期工作。
我不知道如何解决这个问题,任何帮助都会很好。
谢谢