FCIMPL0(Object*, SystemNative::GetCommandLineArgs) { FCALL_CONTRACT; PTRARRAYREF strArray = NULL; HELPER_METHOD_FRAME_BEGIN_RET_1(strArray); LPWSTR commandLine; commandLine = WszGetCommandLine(); if (commandLine==NULL) COMPlusThrowOM(); DWORD numArgs = 0; LPWSTR* argv = SegmentCommandLine(commandLine, &numArgs); if (!argv) COMPlusThrowOM(); _ASSERTE(numArgs > 0); strArray = (PTRARRAYREF) AllocateObjectArray(numArgs, g_pStringClass); // Copy each argument into new Strings. for(unsigned int i=0; i<numArgs; i++) { STRINGREF str = StringObject::NewString(argv[i]); STRINGREF * destData = ((STRINGREF*)(strArray->GetDataPtr())) + i; SetObjectReference((OBJECTREF*)destData, (OBJECTREF)str, strArray->GetAppDomain()); } delete [] argv; HELPER_METHOD_FRAME_END(); return OBJECTREFToObject(strArray); }
FCIMPLEND void QCALLTYPE SystemNative::_GetCommandLine(QCall::StringHandleOnStack retString) { QCALL_CONTRACT; BEGIN_QCALL; LPCWSTR commandLine; if (g_pCachedCommandLine != NULL) { // Use the cached command line if available commandLine = g_pCachedCommandLine; } else { commandLine = WszGetCommandLine(); if (commandLine==NULL) COMPlusThrowOM(); } retString.Set(commandLine); END_QCALL; }
FCIMPLEND void QCALLTYPE SystemNative::_GetCommandLine(QCall::StringHandleOnStack retString) { QCALL_CONTRACT; BEGIN_QCALL; LPCWSTR commandLine; commandLine = WszGetCommandLine(); if (commandLine==NULL) COMPlusThrowOM(); retString.Set(commandLine); END_QCALL; }