@Linda-chan

Linda-chan

Линда Кайе
Linda-chan

Дата рождения: 01.11.1983

Тотальная неудачница и убийца жёстких дисков. Самая большая поклонница Ариэль. Член ордена Вселенского тормоза имени Осаки-сан. Любительница каваййных переднеприводных машинок. Суккуб на полставки. Когти прилагаются.

https://www.lindachan.net

10 я читаю 59 меня читают
15056 постов
25795 комментариев
Linda-chan
01 Dec 2019

Решила на FreeBasic написать простенькую программу. Уже в лёгком шоке. Оказывается, в FreeBasic нельзя просто взять и получить командную строку в оригинальном виде. Есть функция Command(), которая должна возвращать её, но на деле рантайм делает так. Сначала он парсит командную строку, разбивает на элементы и даёт доступ к результату через ARGC/ARGV хреновины. Потом при вызове Command() он СОБИРАЕТ ПОЛУЧЕННОЕ В ОДНУ СТРОКУ и возвращает. Тоесть это:

1 2 3 "4 5 6"

Превращается в это:

1 2 3 4 5 6

Более того, он без спросу, типа для совместимости с линупсом делает развёртывание масок на уровне самой программы, а не оболочки. Это:

*.txt

Превращается в это:

1.txt 2.txt 3.txt

Сюрприз, сюрприз! В доках сказано, как это непотребство выключить, но во-первых для каждой платформы это делается своим костылём, а во-вторых оно не работает.
Короче, действовать придётся, как водится, методом кишлака: GetCommandLine() и вычленением екзешника.

01 Dec 2019

Нужен нативный екзешник для Windows 98.

#zlyow/2 в ответ на /1
02 Dec 2019

ставь тег некромантия тогда

#zlyow/4 в ответ на /2
02 Dec 2019

может всё-таки правильно лезть в ARGC/ARGV? а то пахнет, что в консерватории что-то не так.

02 Dec 2019

Мне нужно по цепочке передать командную строку следующей утилите. ARGC/ARGV здесь ну никак.

#zlyow/6 в ответ на /5
02 Dec 2019

в цикле пробежаться и склеить/скопировать куда надо?)

#zlyow/7 в ответ на /6
02 Dec 2019

Посмотри первый пример. Как ты его обратно телепатируешь?

#zlyow/8 в ответ на /7
02 Dec 2019

костылями, конечно же! :-D

#zlyow/9 в ответ на /8
02 Dec 2019

но вообще кто запрещает взять каждый аргумент в кавычки принудительно? это классический башетрюк.

#zlyow/10 в ответ на /9
02 Dec 2019

Никакой костыль тебе не поможет восстановить информацию, которой больше нет, а про костыляние выдёргиванием из полной строки запуска в конце уже и так написано :}

#zlyow/11 в ответ на /9
02 Dec 2019

У тебя было "4 5 6", а станет "4" "5" "6". Ты уверен, что это равнозначно оригиналу? А если подумать?

#zlyow/12 в ответ на /10
02 Dec 2019

нет, ну смотри.
у тебя в argv - ["1", "2", "3", "4 5 6"], когда ты пробегаешь по этому массиву с целью склейки ты делаешь в духе
acc = acc + " + elem + ";
Таким образом выйдет
'"1" "2" "3" "4 5 6"'
что собственно говоря и надо.

#zlyow/13 в ответ на /12
02 Dec 2019

А оно точно там в таком виде? Ну тогда да, можно. Если, конечно, наличие или отсутствие кавычек не было значимым :}

#zlyow/14 в ответ на /13
02 Dec 2019

чтобы с этим не мучиться, нефиг вообще использовать shellexec, а вызывать через нормальное создание процесса, куда argv передаётся массивом.

#zlyow/15 в ответ на /14
02 Dec 2019

ойбля, у этих деятелей все функции вызова других программ из стандартной библиотеки принимают две строки, вместо строки и массива строк. поубывав бы нахрен за такое.

#zlyow/16 в ответ на /15
03 Dec 2019

А если мне нужны кавычки как есть? А если они там ещё что-то пооптимизировали: заменили слэши на чёрточки, поменяли регистр...

#zlyow/18 в ответ на /7
03 Dec 2019

Следующая по ходу утилита по-своему обрабатывает кавычки? У неё есть кавычки в кавычках?

#zlyow/19 в ответ на /10
03 Dec 2019

Я повторяюсь, но нужно не это :}

#zlyow/20 в ответ на /13
03 Dec 2019

В таком виде, в посте про это вроде как тоже написано :}

#zlyow/21 в ответ на /14
03 Dec 2019

Расскажи мне, куда в CreateProcess() пихать массив, например.
// Я уже раз четвёртый пишу этот каммент с момента регистрации на Пойнте =_=

#zlyow/22 в ответ на /15
03 Dec 2019

А чому именно fb, а не fpc?

03 Dec 2019

Linda-chan, а вообще это сообщение надо на жуйке выкатывать и кастовать местного некрофила @mabu

03 Dec 2019

Подкупили заявления о совместимости с QB.

#zlyow/25 в ответ на /23
03 Dec 2019

Заглянул бы в жуйк, проверил бы как обстоят дела с аналогичным постом там...

#zlyow/28 в ответ на /27
03 Dec 2019

Linda-chan, fb по факту - это такой си (ИЛИ ДАЖЕ МЕСТАМИ ПЛЮСЦЫ), только переделанный на синтаксис басика.

#zlyow/29 в ответ на /25
03 Dec 2019

Linda-chan, да мне чот не очень там... :( Но мабу единственный fb-филл

#zlyow/31 в ответ на /28
03 Dec 2019

Я намекаю, что он с самого появления поста орудует в камментах.

#zlyow/32 в ответ на /31
03 Dec 2019

ну может быть. я просто только сейчас сподобился заглянуть в доку по этому вашему васику. пиздец, инвалиды должны страдать, только и могу сказать.

#zlyow/33 в ответ на /22
03 Dec 2019

Я глянула ман по exec*. Действительно, он принимает массив аргументов. Короче, несовпадение с CreateProcess(), на которое забили.

#zlyow/34 в ответ на /33

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.