ファイルパス、名前、拡張子を返すためのツールとして使用したい簡単なファイル保存ダイアログがあります。この関数は、ファイル名周辺のスタックが破損していることを示すランタイムエラーを生成します。私はそれをそのように使いたい:
wchar_t filename[] = L"";
newGradebookDialog( hwnd, filename );
そして、これが私の機能です。期待どおりにファイル名を変更しますが、ランタイムスタックエラーが発生しません。
void newGradebookDialog( HWND hwnd, wchar_t file[] )
{
OPENFILENAME ofn;
wchar_t saveFileName[MAX_PATH] = L"";
ZeroMemory( &ofn, sizeof( ofn ) );
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = L"Database File (*.db)\0*.db\0";
ofn.lpstrFile = saveFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrDefExt = L"db";
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
ofn.lpstrTitle = L"Save New Database";
if(GetSaveFileName(&ofn))
wcscpy(file,saveFileName);
}