Changes between Version 58 and Version 59 of CompileApp


Ignore:
Timestamp:
Apr 18, 2013, 10:57:46 AM (11 years ago)
Author:
romw
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CompileApp

    v58 v59  
    5151}}}
    5252 * Configure your project to use ANSI strings rather than Unicode.
     53
     54==== Microsoft Specific Changes ====
     55
     56Dealing with the Invalid Parameter exception (0xc000000d):
     57
     58Starting with Visual Studio 2005, Microsoft re-vamped the whole C Runtime Library. Part of the re-vamp process was to do parameter checking on each function. Places that would normally return a NULL value now cause a structured exception to be thrown.
     59
     60The nature of this structured exception is different than most as they specifically coded it so that it will not engage the BOINC Runtime Debugger and it'll display a dialog box asking the user if they wish to debug the error. If the user cancels the error code 0xc000000d is returned without any more information.
     61
     62To get more information with this error you'll need to create a function like this:
     63{{{
     64#ifdef _WIN32
     65void AppInvalidParameterHandler(const wchar_t* expression, const wchar_t* function, const wchar_t* file, unsigned int line, uintptr_t pReserved ) {
     66        fprintf(
     67                stderr,
     68                "Invalid parameter detected in function %s. File: %s Line: %d\n",
     69                function,
     70                file,
     71                line
     72        );
     73        fprintf(
     74                stderr,
     75                "Expression: %s\n",
     76                expression
     77        );
     78        // Cause a Debug Breakpoint.
     79        DebugBreak();
     80}
     81#endif
     82}}}
     83
     84The following code block should be added after the call to boinc_diagnostics_init():
     85{{{
     86#ifdef _WIN32
     87        // Every once and awhile something looks at a std::vector or some other
     88        // CRT/STL construct that throws an exception when an invalid parameter
     89        // is detected.  In this case we should dump whatever information we
     90        // can and then bail.  When we bail we should dump as much data as
     91        // possible.
     92        _set_invalid_parameter_handler(AppInvalidParameterHandler);
     93#endif
     94}}}
     95
     96When this issues happens in the future it'll describe which CRT function call was passed an invalid parameter and it should dump out the callstack for all threads.
     97
     98The function blocks above overwrite the default behavior of the CRT when an invalid parameter is detected.
     99
     100
    53101
    54102=== MinGW and Dev-C++ === #devcpp