Вы не инициализируете lpTemplateName
, и поэтому он содержит случайный шум стека. Это, в свою очередь, приведет к тому, что hInstance будет ссылками, которые также содержат шум стека.
При вызове подобной функции вы должны сначала обнулить структуру и заполнить только ненулевые поля. Примерно так:
OPENFILENAME opf={0};
opf.lStructSize = sizeof(OPENFILENAME);
opf.hwndOwner = mainHWND;
opf.lpstrFilter = Filter;
opf.nFilterIndex = 1L;
opf.lpstrFile = Filestring;
opf.lpstrFile[0] = '\0';
opf.nMaxFile = 256;
opf.lpstrInitialDir = Path;
opf.lpstrTitle = "Open Obj File";
opf.lpstrDefExt = "*.*";
opf.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT;
Нет необходимости явно исключать OFN_ALLOWMULTISELECT
, поскольку вы не включали его в первую очередь!
EDIT
Вы заявляете в комментарии, что это не работает. Звонить по номеру CommDlgExtendedError
- это хорошая идея, и она должна сказать вам, почему она не работает.
Вы также можете попытаться запустить минимально возможную GetOpenFileName
, а именно:
char Filestring[MAX_PATH] = "\0";
OPENFILENAME opf={0};
opf.lStructSize = sizeof(OPENFILENAME);
opf.lpstrFile = Filestring;
opf.nMaxFile = MAX_PATH;
GetOpenFileName(&opf);