c ++未处理的异常0xC0000005访问冲突读取位置0xFEEEFEEE,找不到Marshal.cxx

时间:2015-08-31 13:10:28

标签: c++ winapi visual-studio-2013

我制作了一个小型测试程序,它从文件中读取命令,通过COM端口发送这些命令(当我使用以太网套接字时也会出现问题),并将响应写入新文件。我可以完全浏览文件,并关闭文件。如果我让我的程序保持打开状态(通过窗口循环运行,没有做任何事情)我得到了这个异常

First-chance exception at 0x7670C99E (ole32.dll) in MyProgram.exe:
0xC0000005: Access violation reading location 0xFEEEFEEE

从调用堆栈我有:

enter image description here

如果我尝试继续例外,则说“找不到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();          
    }
}

看起来上一个问题中列出了该问题的修补程序,但我想在应用此修复程序之前确保这是我的实际问题。

还有其他人看过这个问题吗?

通过这个很难调试,因为我注意到有时当我调试时我从来没有得到异常,可能是因为我正在改变事件的时间。例外也是随机发生的,有时在测试结束后一两秒钟,有时一分钟或更长时间......

我注意到在调试时以及在发布模式下都会出现问题。

0 个答案:

没有答案