bool CWebPage::CallJScript(const CString strFunc, const CStringArray& paramArray,CComVariant* pVarResult) { CComPtr<IDispatch> spScript; if(!GetJScript(spScript)) { ShowError(_T("Cannot GetScript")); return false; } CComBSTR bstrMember(strFunc); DISPID dispid = NULL; HRESULT hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1, LOCALE_SYSTEM_DEFAULT,&dispid); if(FAILED(hr)) { ShowError(GetSystemErrorMessage(hr)); return false; } const int arraySize = paramArray.GetSize(); DISPPARAMS dispparams; memset(&dispparams, 0, sizeof dispparams); dispparams.cArgs = arraySize; dispparams.rgvarg = new VARIANT[dispparams.cArgs]; for(int i = 0; i < arraySize; i++) { CComBSTR bstr = paramArray.GetAt(arraySize - 1 - i); // back reading bstr.CopyTo(&dispparams.rgvarg[i].bstrVal); dispparams.rgvarg[i].vt = VT_BSTR; } dispparams.cNamedArgs = 0; EXCEPINFO excepInfo; memset(&excepInfo, 0, sizeof excepInfo); CComVariant vaResult; UINT nArgErr = (UINT)-1; // initialize to invalid arg hr = spScript->Invoke(dispid,IID_NULL,0, DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr); delete [] dispparams.rgvarg; if(FAILED(hr)) { ShowError(GetSystemErrorMessage(hr)); return false; } if(pVarResult) { *pVarResult = vaResult; } return true; }
bool CGrayError::GetErrorMessage(LPTSTR lpszError) const { #ifdef _WIN32 // Compatible with CException and CFileException if ( m_hError ) { // Return the message defined by the system for the error code TCHAR szCode[1024]; int nChars = GetSystemErrorMessage(m_hError, szCode, sizeof(szCode)); if ( nChars ) { if ( m_hError & 0x80000000 ) sprintf(lpszError, "Error Pri=%d, Code=0x%lx(%s), Desc='%s'", m_eSeverity, m_hError, szCode, m_pszDescription); else sprintf(lpszError, "Error Pri=%d, Code=%lu(%s), Desc='%s'", m_eSeverity, m_hError, szCode, m_pszDescription); return true; } } #endif if ( m_hError & 0x80000000 ) sprintf(lpszError, "Error Pri=%d, Code=0x%lx, Desc='%s'", m_eSeverity, m_hError, m_pszDescription); else sprintf(lpszError, "Error Pri=%d, Code=%lu, Desc='%s'", m_eSeverity, m_hError, m_pszDescription); return true; }
bool CGrayError::GetErrorMessage( LPTSTR lpszError, UINT nMaxError, UINT * pnHelpContext ) const { UNREFERENCED_PARAMETER(nMaxError); UNREFERENCED_PARAMETER(pnHelpContext); #ifdef _WIN32 // Compatible with CException and CFileException if ( m_hError ) { // return the message defined by the system for the error code TCHAR szCode[ 1024 ]; int nChars = GetSystemErrorMessage( m_hError, szCode, sizeof(szCode)); if ( nChars ) { if ( m_hError & 0x80000000 ) sprintf( lpszError, "Error Pri=%d, Code=0x%lx(%s), Desc='%s'", m_eSeverity, m_hError, szCode, m_pszDescription ); else sprintf( lpszError, "Error Pri=%d, Code=%lu(%s), Desc='%s'", m_eSeverity, m_hError, szCode, m_pszDescription ); return( true ); } } #endif if ( m_hError & 0x80000000 ) sprintf( lpszError, "Error Pri=%d, Code=0x%lx, Desc='%s'", m_eSeverity, m_hError, m_pszDescription ); else sprintf( lpszError, "Error Pri=%d, Code=%lu, Desc='%s'", m_eSeverity, m_hError, m_pszDescription ); return( true ); }
void Log(LPCWSTR str, DWORD lastError) { CString s = str; s += L" "; s += GetSystemErrorMessage(lastError); Log(s, 0 != lastError); }
/////////////////////////////////////////////////////////////// // // WinMain // // // /////////////////////////////////////////////////////////////// int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // Load the loader.dll and continue the load #ifdef MTA_DEBUG SString strLoaderDllFilename = "loader_d.dll"; #else SString strLoaderDllFilename = "loader.dll"; #endif SString strMTASAPath = PathJoin ( GetLaunchPath (), "mta" ); SString strLoaderDllPathFilename = PathJoin ( strMTASAPath, strLoaderDllFilename ); // Load loader dll HMODULE hModule = LoadLibrary ( strLoaderDllPathFilename ); int iReturnCode = 0; if ( hModule ) { // Find and call DoWinMain typedef int (*PFNDOWINMAIN) ( HINSTANCE, HINSTANCE, LPSTR, int ); PFNDOWINMAIN pfnDoWinMain = static_cast < PFNDOWINMAIN > ( static_cast < PVOID > ( GetProcAddress ( hModule, "DoWinMain" ) ) ); if ( pfnDoWinMain ) iReturnCode = pfnDoWinMain ( hInstance, hPrevInstance, lpCmdLine, nCmdShow ); FreeLibrary ( hModule ); } else { SString strError = GetSystemErrorMessage ( GetLastError () ); SString strMessage ( "Failed to load: '%s'\n\n%s", *strLoaderDllPathFilename, *strError ); AddReportLog ( 5711, strMessage ); BrowseToSolution ( "loader-dll-missing", true, false, false, strMessage ); iReturnCode = 1; } return iReturnCode; }