1 | ||||||
CreateProcess() - некорректно передаются параметры командной строки09.02.2015, 16:57. Показов 2609. Ответов 14
Метки нет (Все метки)
Пытаюсь открыть файл через CreateProcess(), в параметрах прописал путь к программе которая будет открывать файл и путь к самому файлу. Но почему-то Блокнот открывает не тот файл, который я прописал в пути, а создаёт новый.
0
|
09.02.2015, 16:57 | |
Ответы с готовыми решениями:
14
Параметры командной строки CreateProcess Параметры командной строки в функции CreateProcess (); Не передаются параметры командной строки Некорректно передаются параметры в поток |
Модератор
|
||||||
09.02.2015, 17:16 | 2 | |||||
Сообщение было отмечено Sasha как решение
Решение
Ну, вот так как-то...
0
|
Ушел с форума
|
|||||||||||
09.02.2015, 19:17 | 3 | ||||||||||
Добавлю, что Unicode-версии функций CreateProcess могут модифицировать
аргумент, через который передается командная строка. Поэтому вместо
2
|
09.02.2015, 23:31 | 4 | |||||
Интересно только в чем эта модификация может заключаться, и чем может вылиться подстановка строковых типов с const_cast<>
0
|
Ушел с форума
|
|
10.02.2015, 00:02 | 5 |
Видел (в исходниках Win2K), что CreateProcessW на этапе разбора аргументов
временно ставит ноль между именем exe и остальной частью командной строки. Судя по коду, чтобы "не заморачиваться" с выделением дополнительного буфера и иметь возможность вызывать SearchPath, CreateFileW и другие функции для различных проверок. Короче, передавать строковой литерал, как и любую другую константную строку, в lpCommandLine чревато, и это легко проверяется и явно обозначено в MSDN, кстати. Подчеркну: здесь речь идет именно о реальной константности, т.е. когда передается read-only буфер. У std::string.c_str() на известных мне реализациях C++ константность чисто формальная. Ну а почему с CreateProcessA таких проблем нет ? Да потому, что она всего лишь обертка над CreateProcessW (как и подавляющее большинство A-функций), которая выделяет временные буферы на время вызова CreateProcessW и поэтому там access violation не происходит.
3
|
Avazart
|
10.02.2015, 00:06
#6
|
Не по теме: Я просто видел в исходниках QProcess (Qt) там вообще кастуют в си стиле.
0
|
Убежденный
|
10.02.2015, 00:27
#7
|
Не по теме:
0
|
06.10.2015, 10:02 [ТС] | 8 | |||||
По ходу сделал вот так вот
[bcc32 Error] Unit1.cpp(292): E2034 Cannot convert 'wchar_t[37]' to 'char *' [bcc32 Error] Unit1.cpp(292): E2342 Type mismatch in parameter 'lpCommandLine' (wanted 'char *', got 'wchar_t *') Использую XE4. Не могу понять, здесь, что конкретно надо char? Если да то почему wchar_t нельзя здесь использовать?
0
|
Супер-модератор
|
|
06.10.2015, 11:29 | 13 |
Значит, проверяй, что в настройке "_TCHAR maps to" в Project->Options->Directories and Conditionals. Если там выставлен char - то у меня выдает точно ту же ошибку, о которой ты говоришь. Поменяй на wchar_t и пересобери проект.
0
|
06.10.2015, 18:51 [ТС] | 15 |
volvo, спасибо, помогло
Не по теме: Avazart, Хамить не обязательно!!!!!!!!!!!!!!!!!!!!
0
|
06.10.2015, 18:51 | |
06.10.2015, 18:51 | |
Помогаю со студенческими работами здесь
15
Параметры командной строки Параметры командной строки Параметры командной строки Параметры командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |