Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Есть ли стандартное преобразование на С++типа... |
Философия, технологии, алгоритмы! |
|
Опции темы |
11.01.2005, 16:43 | #1 |
Серж
Сообщений: 232
Регистрация: 13.02.2004
Возраст: 42
Не в сети |
Есть ли стандартное преобразование на С++типа...
Есть такая трабла ударился поюзать на визуале с++ апишную функцию CreateProcess. Так вот одним из ее параметров стоит соответственно файл который нуна юзать.Получаю с помощью стандартного диалога CFileDialog::Get...Name эту строку с путем и именем файла пишу в CSTring.Далее подставляю ее в криэте процесс и получаю шиш. Так вот и суть траблы может(чтобы заново не изобретать веллосипед, типа алгоритма подстановки в строку вторых символов "\") есть стандартный способ форматирования строк типа "c:\prog\my.exe" в "c:\\prog\\my.exe" или может это еще какнить прощще делается(я почемуто уверен что должно ).Подскажите если можите.
|
11.01.2005, 21:58 | #3 |
Серж
Сообщений: 232
Регистрация: 13.02.2004
Возраст: 42
Не в сети |
Ну дыкть и мы такс умеем вот тока нуна будет потомочи проследить жизненный цикл этой проги вплоть до ее завершения. И еще в энто время нуна научиться параллельно с например частотой в минуту слать сообщения.Вот и диллема сначала запустить и следить за ее жизнью(это еще не так сложно)но вот как организовать парралельно с энтим работу проги без залипания на WaitForSingleObject.
|
12.01.2005, 07:53 | #4 |
Форумец
Сообщений: 39,918
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
когда ты в коде пишешь "c:\\prog\\my.exe"
то в памяти программы получаешь "c:\prog\my.exe" так что стандартная функция есть - это компилер а что за шиш ты получаешь - подробнее надо говорить шиши они разные бывают |
12.01.2005, 22:46 | #5 |
Серж
Сообщений: 232
Регистрация: 13.02.2004
Возраст: 42
Не в сети |
Spectator
Понял объясняю получаю имя и путь к файлу через вызов CFileDialog:oModal далее вынимаю оттдуда присваиванием типа CString m_strFileName=dlg.GetPathName(); далее CreateProcess(NULL, (LPTSTR)&m_strFileName,//эта строка не работает //"C:\\Program Files\\Cpuz\\cpuz.exe",//эта работает прекрасно NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi) Тепереча надеюсь вопрос вроде корректно задан.Что в данном случае делать то со строкой как может еще нужно было сделать. Да и заодно второй вопрос может кто делал так:этот проц не только запустить нужно но и проследить когда он скажет пока(WM_QUIT) все это время пока он работает нужно еще в проге действия некоторые производить. |
13.01.2005, 18:42 | #6 | |||
Registered User
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 43
Не в сети |
Цитата:
Цитата:
Цитата:
// DWORD dwThreadID; HANDLE hThread = CreateThread(NULL, 0, proc_start_thread, (PVOID) &listenWndHandle, 0, &dwThreadId); // DWORD WINAPI proc_start_thread(LPVOID args) { HWND listenWnd = *((HWND*)args); PROCESS_INFORMATION pi; DWORD dwExitCode; BOOL success = CreateProcess(..., &pi); if (success) { CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess, INFINITE); GetExitCodeProcess(pi.hProcess, &dwExitCode); CloseHandle(pi.hProcess); PostMessage(listenWnd, WM_MYAPP_PROC_FINISHED); } } |
|||
14.01.2005, 09:06 | #7 |
Форумец
Сообщений: 39,918
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
>Не строка это вовсе. Никто не обещал, что внутренний >буфер CString находится вначале. Здесь нужно было >написать m_strFileName.GetBuffer() (возвращает >неконстантную строку).
Не совсем так - буфер действительно возвратит ссылку на собственно строку, но потом его надо будет закрыть - то есть эта функция берет буфер на запись. Его нужно будет потом закрыть. нужно вызвать функцию c_str(). кроме того: BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); то есть CreateProcess не изменяет appName - да и с чего-бы. |
14.01.2005, 11:17 | #8 | |||||
Registered User
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 43
Не в сети |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Впрочем за подробностями можно обратиться к PSDK. |
|||||
14.01.2005, 17:24 | #10 |
Серж
Сообщений: 232
Регистрация: 13.02.2004
Возраст: 42
Не в сети |
Fisher Пасиб за ответ.Я уже немного по другому подошел к вопросу взятия имени и пути файла через GetOpenFileName она просто сразу возратила то что мне нуна. Ну а с преобразованиями у меня пожизненная запарка как во что нить упрусь так блин ничем меня не сдвинеш.
Вот и еще к тебе тодыть впросик как раз по тому как ты подсказал создать нить для запуска и слежения за состоянием приложения. Эта нить не завесит всю прогу до завершения приложения или же этот процесс просто повиснет до завершения WaitForSingleObject(pi.hProcess, INFINITE);а моя основная прога будет себя чувствовать изюмительно. |
14.01.2005, 18:05 | #11 | |
Registered User
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 43
Не в сети |
Цитата:
|
|
15.01.2005, 09:19 | #12 | ||||
Форумец
Сообщений: 39,918
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Цитата:
Цитата:
Цитата:
P.S. между именем файла и аргументами - это запятая? |
||||
15.01.2005, 12:38 | #13 | ||||
Registered User
Сообщений: 67
Регистрация: 08.07.2003
Возраст: 43
Не в сети |
Цитата:
нужно: например в языке С нет ссылок, а в языке Java нет указателей. Итак, мы говорим о С++. В С++ ссылка является альтернативным именем объекта. Вот несколько примеров явного отличия ссылок перед указателями: ссылки обязательно должны быть инициализированы (указатели - нет), не существует ссылок на ссылки (указатели на указатели - рядовой случай), нельзя заставить ссылку ссылаться на другой объект. Думаю, уже становится очевидным, что ссылки и указатели в С++ - две разные сущности. Цитата:
что пишут разработчики этого класса: The buffer is not reallocated if you do not change the length of the CSimpleStringT. The buffer memory is automatically freed when the CSimpleStringT object is destroyed. Цитата:
Unicode version of this function, CreateProcessW, will fail if this parameter is a const string." Ansi-версия не упадет только потому, что создается unicode-копия строки и уже она передается в CreateProcessW. Цитата:
Читайте мат.часть. The system adds a null character to the command line string to separate the file name from the arguments. This divides the original string into two strings for internal processing. Ликбез окончен. |
||||