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();