· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Параметры командной строки

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Май 27, 2003 20:16:06

Как получить параметры командной строки? Например если командная строка имеет вид: filename.exe param1 param2, то как получить эти param1, 2, 3...
Заранее спасибо!


Дата: Май 27, 2003 20:45:50

На каком языке Вы пишете ?


Дата: Май 27, 2003 20:54:14

Вот неплохая библиотечка для разбора командной строки, неоднократно пользовался.
http://home19.inet.tele.dk/jibz/files/clash20010622.zip


Дата: Май 27, 2003 21:23:53

Только для архитектуры NT:

CommandLineToArgvW(...)


Дата: Май 28, 2003 05:46:57

Пишу на MASM32.

Four-F
Спасибо я попробую...


Дата: Май 28, 2003 11:15:30

Попровал написать простейшую программу - не работает :(

invoke MessageBox, NULL, CL_argv[2], ADDR szCaption, MB_OK

В итоге при любой командной строке все равно появляется окно со значком "@" (без кавычек) вместо аргумента командной строки. В чем может быть дело?


Дата: Май 28, 2003 11:59:54

А CL_ScanArgsX ты звал перед этих?
Вобщем, я бы внимательно почитал что написано в clash.inc и разабрал пример. У меня все работало (какая там версия clash я уже не помню). А если баг какой, то лучше с автором побеседовать.

command line and switch handling


Дата: Май 28, 2003 16:45:05

Four-F
"А CL_ScanArgsX ты звал перед этих?"
Разумеется вызвал! Я еще пробовал написать:

ADDR CL_argv[2]
offset CL_argv[2]

Все равно не работает :(


Дата: Май 28, 2003 23:18:44

А... Дык CL_argv содержит указатели, а они DWORD, т.е CL_argv[0], CL_argv[4], CL_argv[8], и т.д.

Т.е для тебя так. Должно работать.
invoke MessageBox, NULL, CL_argv[4], ADDR szCaption, MB_OK

Там, между прочим, в clash.inc прописано такое

; movzx eax,CL_switch['o'] ; get arg number of '-o'
; lea eax,[eax*4+4] ; calculate (eax+1)*4
; mov eax,CL_argv[eax] ; get pointer to next arg


Дата: Май 29, 2003 07:12:15

Four-F
Т.е для тебя так. Должно работать.
А не работает :(

Там, между прочим, в clash.inc прописано такое
Я это читал ;)


Дата: Май 29, 2003 07:24:02

В общем еще раз суть проблемы:
нужно определять параметры командной строки. Для этого скачал предложенную Four-F библиотеку для работы с командной строкой. Написал для пробы простейшую программу - она не работает :(

invoke GetCommandLine
mov CommandLine,eax

invoke CL_ScanArgsX, CommandLine

invoke MessageBox, NULL, CL_argv[2], ADDR szCaption, MB_OK

При запуске программы независимо от командной строки вместо второго аргумента ком. строки появляется значок "@" (без кавычек). Пробовал так же написать:

ADDR CL_argv[2]
offset CL_argv[2]

Результат такой же - опять эта собака (@).


Дата: Май 29, 2003 07:52:33

Gloomy
Почему CL_argv[2] ?
На сколько я понял:

; invoke someFunction, CL_argv[4]
;
; to pass a pointer to the second command line argument (with
; argument number 1) to someFunction.


CL_argv[0] - нулевой аргумент
CL_argv[4] - первый аргумент
CL_argv[8] - второй аргумент
и т.д.


Дата: Май 29, 2003 13:02:01

P2M
Не важно какой я пытаюсь вызвать аргумент - все равно вылазит собака (@) :(


Дата: Май 29, 2003 18:12:14

[ Gloomy: Не важно какой я пытаюсь вызвать аргумент - все равно вылазит собака (@) :( ]

Ну очень странно, т.к. тут все настолько просто, что дальше некуда.
Тот код, который ты привел должен работать 100%, если 2 на 4 поменять.
Дальше разговаривать трудно, т.к. именно такой пример у меня работает.
Вобщем подключай отладчик и разбирайся. Не разберешься, ну мыльни мне (four-f@mail.ru) - посмотрю.


Дата: Май 30, 2003 04:02:01

Gloomy
Не важно ...
Вы шутите?
Важно то, что Asm не Си/Pascal, и Ваш логический номер аргумента в физическое смещение в массиве двойных слов (clashdata.asm: CL_argv dd 256 dup (?)) переводить не будет.

PS Если Вы беретесь писАть на Assembler'е, потрудитесь научиться разбираться хотя бы в простых исходниках (я имею ввиду предложенную Four-F библиотеку).

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046