我正在使用GetOpenFileName
来自的函数Winapi
,并且我正在将过滤器应用于选择文件对话框。
这完美地工作:
LPSTR mfilter = "Filter\0*.PDF\0";
ofn.lpstrFilter = mfilter;
if(GetOpenFileName(&ofn)){
...
这失败了(对话框打开但没有应用过滤器):
string mfilter = "Filter\0*.PDF\0";
ofn.lpstrFilter = mfilter.c_str();
if(GetOpenFileName(&ofn)){
...
我需要使用std:string
,因为我通过参数获取文件扩展名,这种类型有助于连接,但我遇到了不兼容问题......
如果它按预期工作,这将是我的代码(它与前面的示例相同):
const char * ext = &(4:); //Ampersand parameter (from CA Plex) It contains "PDF"
string mfilter = "Filter\0*." + ext + "\0"; //Final string: Filter\0*.PDF\0;
ofn.lpstrFilter = mfilter.c_str();
当我使用这种方法时,我得到了运行时异常:
string mf;
mf.append("Filter")
.append('\0')
.append("*.pdf")
.append('\0');
ofn.lpstrFilter = mf.c_str();