VOID AddToMessageLog(LPTSTR lpszMsg)
{
    TCHAR   szMsg[256];
    HANDLE  hEventSource;
    LPTSTR  lpszStrings[2];  //在我的程序里要修改成LPCTSTR lpszStrings[2];才能编译通过,否则提示error C2664: 'ReportEventA' : cannot convert parameter 8 from 'char *[2]' to 'const char ** ' Conversion loses qualifiers,但在原来的系统里不用修改也能通过,为什么?    if ( !bDebug )
    {
        dwErr = GetLastError();        // Use event logging to log the error.
        //
        hEventSource = RegisterEventSource(NULL, TEXT(SZSERVICENAME));        _stprintf(szMsg, TEXT("%s my error: %d"), TEXT(SZSERVICENAME), dwErr);
        lpszStrings[0] = szMsg;
        lpszStrings[1] = lpszMsg;        if (hEventSource != NULL) {
            ReportEvent(hEventSource, // handle of event source
                EVENTLOG_ERROR_TYPE,  // event type
                0,                    // event category
                0,                    // event ID
                NULL,                 // current user's SID
                2,                    // strings in lpszStrings
                0,                    // no bytes of raw data
                lpszStrings,          // array of error strings
                NULL);                // no raw data            (VOID) DeregisterEventSource(hEventSource);        }
    }
}

解决方案 »

  1.   

    那是因为ReportEvent函数的第八个参量的类型是LPCTSTR*,它要求你匹配.其实这种问题是可以忽略过去,你仍然可以
    LPTSTR  lpszStrings[2]; 
    这样定义.然后强制转换:
      ReportEvent(hEventSource, // handle of event source
                    EVENTLOG_ERROR_TYPE,  // event type
                    0,                    // event category
                    0,                    // event ID
                    NULL,                 // current user's SID
                    2,                    // strings in lpszStrings
                    0,                    // no bytes of raw data
                    (LPTSTR*)lpszStrings,          // array of error strings
                    NULL);                // no raw data
    这是不会出任何问题的.