Я использую функцию GetOpenFileName
от Winapi
, и я применяю фильтр к диалоговому окну выбора файла.C++ LPSTR и проблема с строкой с нулевыми строками
ЭТ работает отлично:
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
, потому что я получаю расширение файла с помощью параметров, и этот тип облегчает конкатенацию, но я получаю проблемы несовместимости ...
Это будет мой код, если он работал, как и ожидалось (IT FAILS так же, как в предыдущем примере):
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();
Если вы установили точку останова, и вы проверяете буфер mfilter, что видите? (перед сбоем ...) –
Всякий раз, когда мне приходится работать с MFC/WinAPI, я всегда использую метод MSIS. Борьба не стоит усилий. –
Если вы не увидите [mcve], я сомневаюсь, что это будет продуктивно. Я могу догадаться, что вы изменяете строку или уничтожаете ее, и поэтому визуализируйте указатель недействительным. –