【发布时间】:2020-06-28 08:36:04
【问题描述】:
我从互联网上删除了此代码。但是,每当我找到打开的文件对话框代码时,我都会一遍又一遍地遇到相同的错误。他们都是同一个错误,真的很烦人。
int choosefile() {
char filename[MAX_PATH];
OPENFILENAME ofn;
ZeroMemory(&filename, sizeof(filename));
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = L"Text Files\0*.txt\0Any File\0*.*\0";
ofn.lpstrFile = filename;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = L"Select a File, yo!";
ofn.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST;
if (GetOpenFileNameA(&ofn))
{
std::cout << "You chose the file \"" << filename << "\"\n";
}
else
{
switch (CommDlgExtendedError())
{
case CDERR_DIALOGFAILURE: std::cout << "CDERR_DIALOGFAILURE\n"; break;
case CDERR_FINDRESFAILURE: std::cout << "CDERR_FINDRESFAILURE\n"; break;
case CDERR_INITIALIZATION: std::cout << "CDERR_INITIALIZATION\n"; break;
case CDERR_LOADRESFAILURE: std::cout << "CDERR_LOADRESFAILURE\n"; break;
case CDERR_LOADSTRFAILURE: std::cout << "CDERR_LOADSTRFAILURE\n"; break;
case CDERR_LOCKRESFAILURE: std::cout << "CDERR_LOCKRESFAILURE\n"; break;
case CDERR_MEMALLOCFAILURE: std::cout << "CDERR_MEMALLOCFAILURE\n"; break;
case CDERR_MEMLOCKFAILURE: std::cout << "CDERR_MEMLOCKFAILURE\n"; break;
case CDERR_NOHINSTANCE: std::cout << "CDERR_NOHINSTANCE\n"; break;
case CDERR_NOHOOK: std::cout << "CDERR_NOHOOK\n"; break;
case CDERR_NOTEMPLATE: std::cout << "CDERR_NOTEMPLATE\n"; break;
case CDERR_STRUCTSIZE: std::cout << "CDERR_STRUCTSIZE\n"; break;
case FNERR_BUFFERTOOSMALL: std::cout << "FNERR_BUFFERTOOSMALL\n"; break;
case FNERR_INVALIDFILENAME: std::cout << "FNERR_INVALIDFILENAME\n"; break;
case FNERR_SUBCLASSFAILURE: std::cout << "FNERR_SUBCLASSFAILURE\n"; break;
default: std::cout << "You cancelled.\n";
}
}
}
这是代码,它给了我一个错误:
ofn.lpstrFile = filename;
a value of type "char *" cannot be assigned to an entity of type "LPWSTR"
Error C2440 '=': cannot convert from 'char [260]' to 'LPWSTR'
然后它给了我另一个错误:
if (GetOpenFileNameA(&ofn))
argument of type "OPENFILENAME *" is incompatible with parameter of type "LPOPENFILENAMEA"
Error C2664 'BOOL GetOpenFileNameA(LPOPENFILENAMEA)': cannot convert argument 1 from 'OPENFILENAME *' to 'LPOPENFILENAMEA'
每行代码都有两个错误,这对我来说真的没有意义,而且非常烦人。在与打开对话框并让用户选择文件有关的每一个问题上,我都会遇到同样的错误。它不像C#那么简单
【问题讨论】:
标签: c++ openfiledialog