如标题所述,我对CreateFile()遇到问题,这对我来说没有任何意义。我承认自从我在Windows上进行任何编程以来已经有十多年了,所以也许我只是错过了一些简单的事情……

int makeButtons(HWND main_window) {

HRESULT ec;
TCHAR config_file[MAX_PATH];
LPSTR config_folder;
HANDLE config_file_handle;
int i;

ec = SHGetFolderPath(NULL,CSIDL_LOCAL_APPDATA,NULL,SHGFP_TYPE_DEFAULT,config_file);
if (ec != S_OK) {
    DisplayError((LPTSTR)"ec = SHGetKnownFolderPath(FOLDERID_Profile,0,NULL,config_file)", ec);
    return -1;
}

i = (lstrlen(config_file)+1) * sizeof(TCHAR);
config_folder = (LPSTR)LocalAlloc(LMEM_ZEROINIT,i);
StringCbCat(config_folder,i,config_file);

StringCbCat(config_file,MAX_PATH,"\\Flipperbuilt\\Sidebar\\config.data");
MessageBox(NULL,config_file,"here",MB_OK);
config_file_handle = CreateFile(config_file,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if (config_file_handle == INVALID_HANDLE_VALUE) {
    MessageBox(NULL,"here","yep",MB_OK);
    DisplayError((LPTSTR)"CreateFile(config_file,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)",GetLastError());
}
else {
    CloseHandle(config_file_handle);
}

LocalFree(config_folder);
return 0;


}

目前,所有MessageBox()调用几乎都只是调试工作...试图弄清崩溃的位置。 DisplayError()调用是另一个函数,该函数格式化并显示GetLastError()的错误代码,并且我确定它可以正常工作。如果我在DisplayError()之前遗漏了MessageBox(),它将崩溃...在从GetLastError()获取4325960之前,将调用MessageBox()。

有任何想法吗?!?

谢谢!!

最佳答案

我感到非常愚蠢……正如Michael Walz所建议的那样,我的问题在于DisplayError例程。在调用StringCchPrintf()的过程中,列表中有一个额外的变量,该变量没有任何与之相关的格式(%s)信息(自那以后,我一直对其进行更改,但直到最后才意识到这一点) !!)再次感谢大家的投入。

int makeButtons(HWND main_window) {

HRESULT ec;
TCHAR config_file[MAX_PATH];
LPTSTR config_folder;
HANDLE config_file_handle;
int i;

ec = SHGetFolderPath(NULL,CSIDL_LOCAL_APPDATA,NULL,SHGFP_TYPE_DEFAULT,config_file);
if (ec != S_OK) {
    DisplayError("ec = SHGetKnownFolderPath(FOLDERID_Profile,0,NULL,config_file)", ec);
    return -1;
}

i = (lstrlen(config_file)+1) * sizeof(TCHAR);
config_folder = (LPSTR)LocalAlloc(LMEM_ZEROINIT,i);
StringCbCat(config_folder,i,config_file);

StringCbCat(config_file,MAX_PATH,"\\Flipperbuilt\\Sidebar\\config.data");
config_file_handle = CreateFile(config_file,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if (config_file_handle == INVALID_HANDLE_VALUE) {
    DisplayError("CreateFile(config_file,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)",GetLastError());
}
else {
    CloseHandle(config_file_handle);
}

LocalFree(config_folder);
return 0;
}

void DisplayError(const char* lpszFunction, DWORD dw) {
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
LPTSTR error_string_in = TEXT((LPSTR)lpszFunction);
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,(lstrlen(error_string_in)+(lstrlen((LPCTSTR)lpMsgBuf) + 10)) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,LocalSize(lpDisplayBuf) / sizeof(TCHAR),TEXT("%d: %s"),dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, error_string_in, MB_OK);

LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
return;
}


我还有什么想念的还是需要继续学习的?!?就像我之前说过的,我确实有一个不错的理解...只是没有掌握细节。

10-08 03:55