GetOpenFileName - тип аргумента
Я пытаюсь вызвать стандартный диалог открытия файла через GetOpenFileName, но появляется ошибка error C2664: 'GetOpenFileNameA' : cannot convert parameter 1 from 'OPENFILENAME *__w64 ' to 'LPOPENFILENAMEA'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Сейчас пробую писать под MVC++.NET, раньше под VC6 эта функция вполне работала.
Кусочек листинга функции, где появляется ошибка (извиняюсь, что много текста, просто может я структуру не так описал):
typedef struct tagOFN
{
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
DWORD lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME;
OPENFILENAME ofnPath;
......
char szTemp[] = "GNT Files (*.gnt)\0*.gnt\0All Files (*.*)\0*.*\0";
//char szTemp[] = "All Files (*.*)\0";
ofnPath.lStructSize = sizeof( OPENFILENAME );
ofnPath.hwndOwner = edithwnd;
ofnPath.hInstance = 0;
ofnPath.lpstrFilter = (LPSTR)szTemp;
ofnPath.lpstrCustomFilter = NULL;
ofnPath.nMaxCustFilter = 0;
ofnPath.nFilterIndex = 1;
ofnPath.lpstrFile = (LPSTR)FileName;
ofnPath.nMaxFile = sizeof( FileName );
ofnPath.lpstrFileTitle = NULL;
ofnPath.nMaxFileTitle = 0;
ofnPath.lpstrInitialDir = NULL;
ofnPath.lpstrTitle="Открыть файл с исходным текстом...";
ofnPath.Flags=OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST;
ofnPath.nFileOffset = 0;
ofnPath.nFileExtension=0;
ofnPath.lpstrDefExt="*";
ofnPath.lCustData=NULL;
ofnPath.lpfnHook=NULL;
ofnPath.lpTemplateName=NULL;
if(GetOpenFileName(&ofnPath)==TRUE)
{
openedF=CreateFile(
(LPSTR)FileName, // pointer to name of the file
GENERIC_READ, // access (read-write) mode
FILE_SHARE_READ, // share mode
NULL, // pointer to security attributes
OPEN_EXISTING, // how to create
FILE_ATTRIBUTE_NORMAL, // file attributes
NULL); // handle to file with attributes to copy
В MSDN вроде она также описана в примерах (пробовал компилировать кусок примера — та же ошибка), правда MSDN не самый уж новый.
погоди, ты структуру OPENFILENAME сам описывал?
Просто в VC6 оно именно так и работало - оттуда прям кусочек выдрал. Спасибо у мну уже руки выпрямились немного.