//--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { if (!ActivatePrevInstance(__classid(TRxDemoMainForm)->ClassName(), EmptyStr)) /* allows only one instance of application */ { Application->Initialize(); Application->Title = "RX Library Demo"; Application->CreateForm(__classid(TRxDemoMainForm), &RxDemoMainForm); Application->Run(); } } catch (Exception &exception) { Application->ShowException(&exception); } return 0; }
WORD NEAR PASCAL ExecProgram(PWOWINFO pWowInfo) { WORD ret; PARAMETERBLOCK ParmBlock; CMDSHOW CmdShow; char CmdLine[CCHMAX]; ret = 0; // Don't mess with the mouse state; unless we're on a mouseless system. if (!GetSystemMetrics(SM_MOUSEPRESENT)) ShowCursor(TRUE); // // prepare the dos style cmd line (counted pascal string) // pWowInfo->lpCmdLine contains the command tail (excluding argv[0]) // CmdLine[0] = lstrlen(pWowInfo->lpCmdLine) - 2; lstrcpy( &CmdLine[1], pWowInfo->lpCmdLine); // We have a WOWINFO structure, then use it to pass the correct environment ParmBlock.wEnvSeg = HIWORD(pWowInfo->lpEnv); ParmBlock.lpCmdLine = CmdLine; ParmBlock.lpCmdShow = &CmdShow; CmdShow.two = 2; CmdShow.nCmdShow = pWowInfo->wShowWindow; ParmBlock.dwReserved = NULL; ret = LoadModule(pWowInfo->lpAppName,(LPVOID)&ParmBlock) ; switch (ret) { case ERROR_ERROR: case ERROR_MEMORY: ret = IDS_NOMEMORYMSG; break; case ERROR_FILENOTFOUND: ret = IDS_FILENOTFOUNDMSG; break; case ERROR_PATHNOTFOUND: ret = IDS_BADPATHMSG; break; case ERROR_MANYOPEN: ret = IDS_MANYOPENFILESMSG; break; case ERROR_DYNLINKSHARE: ret = IDS_ACCESSDENIED; break; case ERROR_VERSION: ret = IDS_NEWWINDOWSMSG; break; case ERROR_RMEXE: /* KERNEL has already put up a messagebox for this one. */ ret = 0; break; case ERROR_MULTDATAINST: ret = ActivatePrevInstance(pWowInfo->lpAppName); break; case ERROR_COMPRESSED: ret = IDS_COMPRESSEDEXE; break; case ERROR_DYNLINKBAD: ret = IDS_INVALIDDLL; break; case SE_ERR_SHARE: ret = IDS_SHAREERROR; break; case ERROR_WIN32: ret = IDS_CANTLOADWIN32DLL; break; // // We shouldn't get any of the following errors, // so the strings have been removed from the resource // file. That's why there's the OutputDebugString // on checked builds only. // #ifdef DEBUG case ERROR_OTHEREXE: case ERROR_PMODEONLY: case SE_ERR_ASSOCINCOMPLETE: case SE_ERR_DDETIMEOUT: case SE_ERR_DDEFAIL: case SE_ERR_DDEBUSY: case SE_ERR_NOASSOC: { char szTmp[64]; wsprintf(szTmp, "WOWEXEC: Unexpected error %d executing app, fix that code!\n", (int)ret); OutputDebugString(szTmp); } // // fall through to default case, so the execution // is the same as on the free build. // #endif default: if (ret < 32) goto EPExit; ret = 0; } EPExit: if (!GetSystemMetrics(SM_MOUSEPRESENT)) { /* * We want to turn the mouse off here on mouseless systems, but * the mouse will already have been turned off by USER if the * app has GP'd so make sure everything's kosher. */ if (ShowCursor(FALSE) != -1) ShowCursor(TRUE); } return(ret); }