· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Правильно писать CommandLine procedure...

<< . 1 . 2 . 3 . 4 . 5 . >>

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


Дата: Авг 6, 2003 00:36:02 · Поправил: KiNDeR

Asterix
Я не отлаживал, нечем, я на работе, но попробывал с разными параметрами и вроде багов нема.

Скачал Olly, протрассировал, все нормуль...Работает...


Дата: Авг 6, 2003 00:38:15

Asterix
Твой пример не работает если в командной строке нет параметров
Если параметров нет, MessageBox не появляется. Это не баг а фича.

А что будет если командная строка имеет следующий вид: "C:\path\my program" Как отличить, что "my program" -- это имя экзешника а не имя "my" и параметр "program". Видимо поэтому параметры принято начинать со спец. символа, вроде '/'.


Дата: Авг 6, 2003 01:04:08

KiNDeR
я там в предыдущем посте добавил...


[ Quantum А что будет если командная строка имеет следующий вид: "C:\path\my program" Как отличить, что "my program" -- это имя экзешника а не имя "my" и параметр "program". Видимо поэтому параметры принято начинать со спец. символа, вроде '/'.]

Это ты к чему?, поэтому и добавлено '/' к имени параметра,
а вот если спец. символ будет '-', то имея в пути ' -' мой третий
пример в пролёте...
Я же говорил приведи весь код программы, может я не правильно
интерпретировал твою мысль, но у меня если в командной строке
нет управляющих параметров то esi указывает на byte 00h, а вот
куда оно указывает у KiNDeR... может в этом кроется
баг в приходе(иногда) строки с кракозябликами...


Дата: Авг 6, 2003 01:09:47 · Поправил: KiNDeR

Asterix
но у меня если в командной строке
нет управляющих параметров то esi указывает на byte 00h, а вот
куда оно указывает у KiNDeR... может в этом кроется
баг в приходе(иногда) строки с кракозябликами...


У меня всегда указывает на mParam, если есть управляющий параметр, то выводим его, иначе выводим стрку состоящую из 260 byte 00h(т.е ничего...).


Дата: Авг 6, 2003 01:30:23

KiNDeR
Я попробовал запускать скомпилённый по твоему исходнику exe'шник
несколько раз под Olly, больше этой ситуации не возникало, так что
можно списать на глюк в Винде...
Но твой код по принципу схож с моим третьим примером, поэтому
возникает вопрос: чей код признать более правильным???,
т.к. Quantum молчит..., а его пример я так и не понял... :-)


Дата: Авг 6, 2003 01:38:06

Asterix
А ты мой код по ХР пробывал? Работает?
В нашы коды надо добавить еще анализ "-" и пробелов в ситуации когда "/какое-то_слово пробел слово", что бы обрабатывалось только первое слово...


Дата: Авг 6, 2003 01:48:23

Asterix
т.к. Quantum молчит
Временно отлучился... Прошу не дисквалифицировать из компо!

Я же говорил приведи весь код программы
Там действительно был баг. Вот исправленный вариант:
.386
.model flat, stdcall
option casemap:none

include         windows.inc
include         kernel32.inc
includelib      kernel32.lib
include         user32.inc
includelib      user32.lib

.CODE
start:
   invoke GetCommandLine
   push eax
   invoke lstrlen,eax
   pop edi
   test eax,eax
   jz _badpath
   add edi,eax
   xchg eax,ecx
   mov al,' '
   std
   repnz scasb
   cld
   jnz _badpath
   add edi,2
   xor eax,eax
   invoke MessageBox,eax,edi,eax,eax
_badpath:
   invoke ExitProcess,0
end start


ЗЫ: GetModuleFileName не возвращает параметры, а жаль.


Дата: Авг 6, 2003 01:57:06

Quantum
А как же это? Да, еще..., и если этого blabla нет, т.е. нет ничего в управляющих параметрах,
то messagebox должен быть пустым...
:)


Дата: Авг 6, 2003 01:57:30 · Поправил: Asterix

И чтобы меня не упрекали в использовании лишней API, в связи с этим
представляю Пример №4
----------------------------------------------------------------------
4)
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data

cmdline         dd   0

.code
start:

          invoke GetCommandLine
	mov cmdline, eax
	mov esi,eax
metka:
	.if byte ptr [esi]!=00h
	.if byte ptr [esi]!=' '
	inc esi
	jmp metka
	.endif
	inc esi
	.if byte ptr [esi]!='/'
	jmp metka
	.endif
	inc esi
	.endif
	invoke MessageBox, NULL,esi, 0, MB_OK
	invoke ExitProcess,NULL
end start


Дата: Авг 6, 2003 02:04:04 · Поправил: Asterix

[ KiNDeR: "-" и пробелов в ситуации когда "/какое-то_слово пробел слово", что бы обрабатывалось только первое слово...]

Управляющий символ '-' для меня не критичен, потому что иначе
код намного усложнится, вполне обойдусь символом '/'.

"/какое-то_слово пробел слово"
Это обрабатывать не нужно, у меня за управляющий параметр берётся
всё что будет после комбинации ' /', т.е. после пробела и спец. символа.
Я не собираюсь обрабатывать глюки user'а, который с пьяну, видимо,
после управляющего символа добавит крепкое словцо, ну чтоб прога
круче его понимала ;-)


Дата: Авг 6, 2003 02:05:23

Asterix
Было бы предложено...:)


Дата: Авг 6, 2003 02:09:00 · Поправил: Asterix

Теперь я займусь разбором того что накодил Quantum :-)


Дата: Авг 6, 2003 02:10:57

KiNDeR
А как же это?
Тады так:
start:
     invoke GetCommandLine
     push eax
     invoke lstrlen,eax
     pop edi
     test eax,eax
     jz _er
     add edi,eax
     mov esi,edi
     xchg eax,ecx
     mov al,' '
     std
     repnz scasb
     cld
     push MB_OK
     push OFFSET msgTitle
     jz @@1
     push esi
     jmp @@2
@@1: add edi,2
     push edi
@@2: push 0
     call MessageBox
_er: invoke ExitProcess,0
end start


Дата: Авг 6, 2003 02:12:28

Quantum
Все нармуль :-)...


Дата: Авг 6, 2003 02:13:49

А нет ни у кого примерчика под fasm? А то ему всякие такие штуки
.if byte ptr [esi]!='/'
не нравются :(

<< . 1 . 2 . 3 . 4 . 5 . >>


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