Napisałem sobie programik który ma zapisać zmienną temp do nowo utworzonego pliku. Udało mi się utworzyć nowy plik, jednak jest problem z zapisem do niego zmiennej temp :/ Kod programu: http://ideone.com/tuIhW
Bedę wdzięczny za pomoc.

- Rejestracja:prawie 20 lat
- Ostatnio:2 minuty
- Lokalizacja:Gorlice
Kompilować to się kompiluje (ideone nie wie co to INVOKE) ale aby coś zapisać do pliku nie wystarczy zmienić nazw funkcji z ReadFile na WriteFile zobacz jakich parametrów oczekuje ta funkcja a co ty podajesz.
EDIT//
Jak chcesz się uczyć to nie zgaduj i o najdrobniejsze rzeczy pytaj na forum tylko zacznij od jakiegoś kursu np. http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/index.php
Właśnie z tej strony http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/0013.php znalazłem i na podstawie tego mam INVOKE WriteFile, hFile, OFFSET temp, fSize, OFFSET readBytes, 0
Ale coś podałem źle i nie wiem .. :/
OK tamten problem udało mi się rozwiązać :) Teraz mam kłopot taki, że nie potrafie kontrolować parametrów, tzn. jak podam więcej niż 2 parametry, albo w ogóle to ma mi wyświetlić txt6. Od kilku godzin kombinuje z warunkami if .. else, ale już sam nie wiem jak to ułożyć najlepiej :/ Aktualny kod programu: http://ideone.com/WekvV#view_edit_box
Będę wdzięczny za pomoc!
- Rejestracja:prawie 20 lat
- Ostatnio:2 minuty
- Lokalizacja:Gorlice
masz funkcję zwracającą liczbę podanych parametrów:
GetCLCount PROC uses ecx
LOCAL szTempBuff[128]:BYTE
mov ecx, 1
@@:
push ecx
INVOKE GetCL, ecx, ADDR szTempBuff
pop ecx
cmp eax, 1
jne @F
inc ecx
jmp @B
@@:
dec ecx
mov eax, ecx
ret
GetCLCount ENDP
i wywołujesz przed pobraniem parametrów
INVOKE GetCLCount
.IF eax == 0
;tu to co ma zrobic jak nie ma parametrow
.ELSEIF eax > 2
;tu jak jest wiecej niz 2
.ENDIF
Zapodaje jeszcze akutalny kod: http://ideone.com/dcIeg
- Rejestracja:prawie 20 lat
- Ostatnio:2 minuty
- Lokalizacja:Gorlice
Bo użyłeś WriteConsoleW zamiast WriteConsole
a tak przy okazji kilka porad:
- Często stosujesz coś takiego:
INVOKE lstrlen, OFFSET cos
INVOKE WriteConsole, hInstance, OFFSET cos, eax, NULL, NULL
Lepiej napisać sobie funkcję:
PrintConsole PROC lpText: DWORD
INVOKE lstrlen, lpText
INVOKE WriteConsole, hInstance, lpText, eax, NULL, NULL
ret
PrintConsole ENDP
i wywoływać np:
INVOKE PrintConsole, OFFSET txt6
- Łam długie linie:
Głupio wygląda (a już o próbie wydruku nie wspomnę):
INVOKE CreateFile,ADDR fName, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_NEW,FILE_ATTRIBUTE_ARCHIVE,0
Lepiej napisać (znak \ służy do łamania linii):
INVOKE CreateFile,ADDR fName, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or \
FILE_SHARE_WRITE, NULL, CREATE_NEW,FILE_ATTRIBUTE_ARCHIVE,0
- Tu masz dość dziwne:
.IF eax == 0
jmp @errp
.ELSEIF eax > 2
jmp @errp
.ELSEIF eax == 1
jmp @p1
.ELSEIF eax == 2
jmp @p2
.ENDIF
Skoro przy eax równym 0 i większym od 2 robi to samo to czemu nie napisać:
.IF eax == 0 || eax > 2
jmp @errp
.ELSEIF eax == 1
jmp @p1
.ELSEIF eax == 2
jmp @p2
.ENDIF
Chyba tak lepiej. Można też użyć makra SWITCH (gdzieś w przykładach jest) ale skoro tego używasz 1 miejscu to za bardzo się nie opłaca.