TEST(TStr, CloneCStr) { const TStr Str = "abcdef"; const TStr Empty = ""; char* StrClone = Str.CloneCStr(); char* EmptyClone = Empty.CloneCStr(); EXPECT_EQ(Str, StrClone); EXPECT_EQ(Empty, EmptyClone); }
bool TSysProc::ExeProc(const TStr& ExeFNm, TStr& ParamStr){ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi, sizeof(pi)); char * ParamStrCopy = ParamStr.CloneCStr(); // Start the child process. BOOL Ok=CreateProcess( ExeFNm.CStr(), // module name ParamStrCopy, // patameters NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi); // Pointer to PROCESS_INFORMATION structure. delete[] ParamStrCopy; if (Ok){ // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); return true; } else { return false; } }