我制作了一个小型测试程序,它从文件中读取命令,通过COM端口发送这些命令(当我使用以太网套接字时也会出现问题),并将响应写入新文件。我可以完全浏览文件,并关闭文件。如果我让我的程序保持打开状态(通过窗口循环运行,没有做任何事情)我得到了这个异常
First-chance exception at 0x7670C99E (ole32.dll) in MyProgram.exe:
0xC0000005: Access violation reading location 0xFEEEFEEE
从调用堆栈我有:
如果我尝试继续例外,则说“找不到marshal.cxx”。
我想知道它是否与这个问题有类似的问题
Unhandled exception in marshal.cxx under VS2013
我在打开命令文件时使用GetOpenFileName()
。
szFileName
- >命令文件名
sFileName
- >日志文件名
void GetFileName(HWND hwnd)
{
OPENFILENAME ofn;
//char FilterSpec = "All Files(.)\0*.*\0";
TCHAR *Title = _T("Open....");
TCHAR szFileName[MAX_PATH];
TCHAR szFileTitle[MAX_PATH];
*szFileName = 0;
*szFileTitle = 0;
/* fill in non-variant fields of OPENFILENAME struct. */
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = GetFocus();
ofn.lpstrFilter = _T("All Files(.)\0*.*\0");
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrInitialDir = "C://Interface Card/Test Files"; //_T("."); // Initial directory.
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrTitle = Title;
ofn.lpstrDefExt = _T(".");
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if (GetOpenFileName(&ofn))
{
LoadTextFile(szFileName);
}
int i = 0, j = 0;
while (szFileName[i] != NULL)
{
sFileName[i] = szFileName[i];
i++;
}
//Subtract .txt at end (4)
i = i - 4;
sFileName[i] = ' '; i++;
time_t now = time(0); //Get current time
struct tm tstruct = *localtime(&now);
char bufTime[80];
strftime(bufTime, sizeof(bufTime), "Date %m-%d-%Y Time %I-%M", &tstruct);
j = 0;
while (bufTime[j] != '\0')
{
sFileName[i] = bufTime[j];
i++; j++;
}
sFileName[i] = '.'; i++;
sFileName[i] = 't'; i++;
sFileName[i] = 'x'; i++;
sFileName[i] = 't'; i++;
sFileName[i] = '\0'; i++;
}
我打开这两个文件:
BOOL SaveTextFile(LPCTSTR pszFileName)
{
FileLog = fopen(pszFileName, "w");
if (FileLog == NULL)
return FALSE;
else
return TRUE;
}
BOOL LoadTextFile(LPCTSTR pszFileName)
{
File = fopen(pszFileName, "r");
if (File == NULL)
return FALSE;
else
return TRUE;
}
我的主窗口循环:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if (isTest)
{
RunTest();
}
}
看起来上一个问题中列出了该问题的修补程序,但我想在应用此修复程序之前确保这是我的实际问题。
还有其他人看过这个问题吗?
通过这个很难调试,因为我注意到有时当我调试时我从来没有得到异常,可能是因为我正在改变事件的时间。例外也是随机发生的,有时在测试结束后一两秒钟,有时一分钟或更长时间......
我注意到在调试时以及在发布模式下都会出现问题。