Содержание
- ASM Community
- Ассемблер MASM не видит функции из «Windows API»-ских библиотек
- 1 ответ 1
- Error a2006 undefined symbol messagebox
- Error a2006 undefined symbol messagebox
- Помогите с ассемблером ругается только на call
I just started ASM but I have already started to catch on very easily. For the past 3 days I’ve been stuck on the MessageBox/MessageBoxA function. I cannot get a MessageBox no matter how hard I try. When using the code below, I receive this error at assembly, «error a2006: undefined symbol : MessageBox» & «error a2006: undefined symbol : ExitProcess.» Someone told me it was because the WINAPI.inc include is for 16-bit systems only.
Here’s what I have:
I just looked at the 2 files (WINAPI.inc & WINDOWS.inc) and there are some functions in WINAPI.inc that are required for the program to run that aren’t in WINDOWS.inc but when I try to include both of them I receive this error:
Assembling: C:program.asm.
C:Documents and SettingsAdministratorDesktopSU1.0SourceWINDOWS.inc(73) : error A2111: conflicting parameter definition
C:Documents and SettingsAdministratorDesktopSU1.0SourceWINDOWS.inc(7916) : error A2008: syntax error : offset
C:Documents and SettingsAdministratorDesktopSU1.0Sourceprogram.asm(32) : error A2008: syntax error : in directive
C:Documents and SettingsAdministratorDesktopSU1.0Sourceprogram.asm(99) : error A2006: undefined symbol : MessageBox
C:Documents and SettingsAdministratorDesktopSU1.0Sourceprogram.asm(100) : error A2006: undefined symbol : ExitProcess
C:Documents and SettingsAdministratorDesktopSU1.0Sourceprogram.asm(108) : error A2006: undefined symbol : ExitProcess
I think you have to include either windows.inc or winapi.inc.
The windows.inc file is part of the masm32 package, and only has constants and structures. To declare functions you must use additional include files, also part of the package, one for each dll: user32.inc, kernel32.inc, etc.
I don’t know where does winapi.inc come from, or what it contains, so I can’t help you use it. 🙁
Nevermind I FINALLY figured it out, wow.
Here’s what I did:
Now you can do the same for ExitProcess:
Still I’d recommend you to use hutch’s include files, so you don’t have to do the same for each and every API you want to call. 😯
Источник
Ассемблер MASM не видит функции из «Windows API»-ских библиотек
Изучаю Ассемблер для архитектур x86 Intel-овских процессоров на Windows. Новичок.
Ассемблер MASM не видит функции из «Windows API»-ских библиотек. Вот весь мой код «Hello world»-а через MessageBox. (» .inc «-файлы и прочее использовать не хочу, хочу в деталях самим расписывать и без них делать. Использую не MASM32 из сайта masm32.com, а ml.exe из папки Visual Studio (использую Visual Studio 2019 года. У самого́ Windows 7)).
А консоль выдаёт вот что:
Не понимаю как это решить, чтобы MASM видел что эти функции ( LoadLibraryA , и т.д.) находятся в » kernel32.dll » (на которую в теории должна указывать » kernel32.lib » подключенная с помощью директивы » includelib «)
1 ответ 1
Решил сам. Оказывается просто надо было все функции объявлять с подчёркиванием » _ » в начале имени функции и «собакой» » @ » на конце имени функции после которой указываются количество байт занимаемых параметрами процедуры.
Вот исправленный код объявления их внешними:
И при использовании (например через » call «) тоже надо прописывать их так. Проверял по другому — не работает — писать нужно только так (Windows API-ские функции только, а свои можно хоть как (но надо ли » @ » в своих функциях использовать не знаю)):
А в 64-битной программе эти функции по другому вызываются, без подчёркивания » _ » и без указания собаки » @ » и без указания байт параметров после неё.
Но при передаче в функцию » GetProcAddress » имени функции которую нужно взять из DLL, нужно писать просто имя функции без этих символов.
Только осталась проблема что файл » .exe » сассемблировался не в нужную папку и теперь либо он не сассемблировался, либо его искать надо, но это уже другая тема, не этого вопроса, а сам вопрос решён.
[Решил] Оказывается надо прописать сначала в командной строке путь к папке в которой должен появится файл с помощью » cd «, например » cd «Путь к файлу» «
И, кстати, только что узнал что нужно использовать процедуры с » A » символом на конце, а не » W «, если используешь кавычки ‘ ‘ или » » для вписывания символов в память, иначе будешь получать иероглифы. Но процедуры с » A » символом на конце используются для работы с массивами символов как с 8-битными символами из кодировки ASCII, а процедуры с » W » символом на конце для работы с массивами символов как с 16-битной кодировкой Unicode (которая вроде UTF-16 называется, не помню точно)
Источник
Error a2006 undefined symbol messagebox
Ругается так- D:MYPROGНовая папка(2)Prg_3_1.asm(10) : error A2004: symbol conflict
Подскажите, обьясните причину.
Вот и прога от dorr не компилитя по тем же причинам.
D:MYPROGMass.asm(32) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(35) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(238) : warning A4023: with /coff switch, leading underscore required for start address : start
То- есть, строки
(32)assume ds:@data,es:@data
(35)mov ax, @data
Вот и прога от dorr не компилитя по тем же причинам.
D:MYPROGMass.asm(32) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(35) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(238) : warning A4023: with /coff switch, leading underscore required for start address : start
То- есть, строки
(32)assume ds:@data,es:@data
(35)mov ax, @data
Источник
Error a2006 undefined symbol messagebox
Ругается так- D:MYPROGНовая папка(2)Prg_3_1.asm(10) : error A2004: symbol conflict
Подскажите, обьясните причину.
Вот и прога от dorr не компилитя по тем же причинам.
D:MYPROGMass.asm(32) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(35) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(238) : warning A4023: with /coff switch, leading underscore required for start address : start
То- есть, строки
(32)assume ds:@data,es:@data
(35)mov ax, @data
Вот и прога от dorr не компилитя по тем же причинам.
D:MYPROGMass.asm(32) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(35) : error A2006: undefined symbol : DGROUP
D:MYPROGMass.asm(238) : warning A4023: with /coff switch, leading underscore required for start address : start
То- есть, строки
(32)assume ds:@data,es:@data
(35)mov ax, @data
Источник
Помогите с ассемблером ругается только на call
386
.model flat, stdcall
option casemap :none
include masm32includewindows.inc
include masm32includeuser32.inc
include masm32includekernel32.inc
include masm32includemasm32.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
includelib masm32libmasm32.lib
.data
conTitle DB «Sum of integers in array», 0
mes1 DB «Array: «, 0
len_mes1 EQU $-mes1
mes2 DB 0dh, 0ah, «Sum of elements = «, 0
len_mes2 EQU $-mes2
charBuf DB » «, 0
len_charBuf DD $-charBuf
iarray DD -9, 3, -6, 2, 11, -5
larray EQU ($-iarray)/4
ISUM DD 0
lpFmt DB «%d», 0
readBuf DB ?
lenReadBuf DD 1
hStdIn DD 0
hStdOut DD 0
chrsRead DD 0
chrsWritten DD 0
STD_INP_HNDL DD -10
STD_OUTP_HNDL DD -11
.code
start:
call AllocConsole
test EAX, EAX
jz ex
push offset conTitle
call SetConsoleTitleA
test EAX, EAX
jz ex
call GetOut_Hndl
call getInp_hndl
push EBX
mov EBX, offset mes1
mov ECX, len_mes1
call write_con
pop EBX
mov ESI, offset iarray
mov ECX, larray
show_next:
push ESI
push ECX
push DWORD PTR [ESI]
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
push EBX
mov EBX, offset charBuf
mov ECX, len_charBuf
call write_con
pop EBX
call clear_buffer
pop ECX
pop ESI
add ESI, 4
loop show_next
; нахождение суммы элементов массива
mov ECX, larray
mov ESI, offset iarray
finit
fild DWORD PTR [ESI]
next:
fiadd DWORD PTR [ESI+4]
add ESI, 4
loop next
fistp DWORD PTR ISUM
fwait
; преобразование суммы в строку символов
push DWORD PTR ISUM
push offset lpFmt
push offset charBuf
call wsprintf
add ESP, 12
push EBX
mov EBX, offset mes2
mov ECX, len_mes2
call write_con
pop EBX
; вывод значения суммы на экран
push EBX
mov EBX, offset charBuf
mov ECX, len_charBuf
call write_con
pop EBX
call clear_buf
; ожидание ввода с консоли и выход из программы
ошибки только на call
Assembling: C:masm32binwwwwwwww.asm
C:masm32binwwwwwwww.asm(126) : error A2088: END directive required at end of file
C:masm32binwwwwwwww.asm(50) : error A2006: undefined symbol : GET_OUT_HNDL
C:masm32binwwwwwwww.asm(51) : error A2006: undefined symbol : getInp_hndl
C:masm32binwwwwwwww.asm(56) : error A2006: undefined symbol : write_con
C:masm32binwwwwwwww.asm(73) : error A2006: undefined symbol : write_con
C:masm32binwwwwwwww.asm(76) : error A2006: undefined symbol : clear_buf
C:masm32binwwwwwwww.asm(107) : error A2006: undefined symbol : write_con
C:masm32binwwwwwwww.asm(115) : error A2006: undefined symbol : write_con
C:masm32binwwwwwwww.asm(117) : error A2006: undefined symbol : clear_buf
.386
.model flat, stdcall
option casemap :none
include masm32includewindows.inc
include masm32includeuser32.inc
include masm32includekernel32.inc
include masm32includemasm32.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
includelib masm32libmasm32.lib
.data
conTitle DB «Sum of integers in array», 0
mes1 DB «Array: «, 0
len_mes1 EQU $-mes1
mes2 DB 0dh, 0ah, «Sum of elements = «, 0
len_mes2 EQU $-mes2
charBuf DB » «, 0
len_charBuf DD $-charBuf
iarray DD -9, 3, -6, 2, 11, -5
larray EQU ($-iarray)/4
ISUM DD 0
lpFmt DB «%d», 0
readBuf DB ?
lenReadBuf DD 1
hStdIn DD 0
hStdOut DD 0
chrsRead DD 0
chrsWritten DD 0
.code
start:
call AllocConsole
test EAX, EAX
jz ex
push offset conTitle
call SetConsoleTitleA
test EAX, EAX
jz ex
Источник
How can I write a program in assembly language for Windows CE (x86)?
Now I’m using VS2008 winth Windows CE 5.0 SDK, and my C++ programs runs fine.
I tried to create an asm file with my code and to include it into project:
#include "stdafx.h"
#include "windows.h"
extern "C" void clear();
int _tmain(int argc, _TCHAR* argv[])
{
clear();
return 0;
}
clear.asm:
.586 ;Target processor. Use instructions for Pentium class machines
.MODEL FLAT, C ;Use the flat memory model. Use C calling conventions
.STACK ;Define a stack segment of 1KB (Not required for this example)
.DATA ;Create a near data segment. Local variables are declared after
;this directive (Not required for this example)
.CODE ;Indicates the start of a code segment.
clear PROC
xor eax, eax
xor ebx, ebx
ret
clear ENDP
END
Everything goes fine until I want to invoke WinApi function (MessageBox) form asm code.
.DATA ;Create a near data segment. Local variables are declared after
szMessageText DB "Hello world text", 0
szMessageCaption DB "HWorld capt, 0
.CODE ;Indicates the start of a code segment.
clear PROC
Invoke MessageBox, NULL, ADDR szMessageText, ADDR szMessageCaption, MB_OK
clear ENDP
END
It gives
error A2006:undefined symbol : MessageBox
I added include path with Windows CE SDK libs for MASM:
C:Program FilesWindows CE Toolswce500STANDARDSDK_500Libx86
and tried to include coredll.lib, but there is no effect
includelib coredll.lib
So main question is:
Where is my mistake? Can I write asm code with winapi functions?
Thaks for your answers!
————————————————
UPD:
Thanks everyone.
I managed to build project by writing a proto defenition of function:
MessageBoxW PROTO hwnd:DWORD, lpText:DWORD, lpCaption:DWORD,
uType:DWORD
How can I avoid writing such prototypes for every function that I’ll use?
As far as I understood i need .inc file with proto defenitions of the functions?
Or somehow use function definitions that are in .h files?
NoNaMe, благодарю тебя за твою ВНЕЗАПНУЮ правку моего кода (хотя сёдни, вроде, ышшо не тяпница для тяпничного кода, нопремер ;о) Тут всё прекрасно: и совершенно ненужное усложнение перенесением кода в процедуру main, и сама эта процедура, которая столь же ВНЕЗАПНО заканчивается ExitProcess’м вместо RET, несмотря на то, что сразу после вызова main ты залепил ещё и макрос exit (который в файле Macros.asm ВНЕЗАПНО определяется вот так, например ;о)
Assembler | ||
|
Но вот вопрос: а не маловато ли в твоём уже коде ентих самых ExitProcess’ов и процедур без RET? По-моему, так маловато, а посему взял на себя невероятную смелость скромно дополнить уже твой, чоужтам, гениальный код вот таким образом (не ЧСВ ради, а пользы для: с целью дальнейшего превращения простейшего примера в говнокод, заодно переведя всё что возможно в нижний регистр, как сейчас принято, например ;о):
PureBasic | ||
|
Преимущества такого решения очевидны:
1. До ВНЕЗАПНОСТИ резко возрастает вероятность завершения проги через ExitProcess.
2. Представляет возможность новичку полохматить бабушку над тем, в каком месте всё же ж произойдёт выход, например ;о)
Ну и все мы, конешни, благодарны тебе за совершенно уникальный батничек (который, правда, почему-то подозрительно напоминает вот этот, взятый из одного из примеров Masm32v11, с обрезанными комментариями, заменёнными буквами дисков и прикрученными путями, например ;о)
Кликните здесь для просмотра всего текста
Код
@echo off : ------------------------------- : if resources exist, build them : ------------------------------- H:masm32BINrc.exe /v rsrc.rc H:masm32BINCVTRES.EXE /machine:ix86 rsrc.res if exist %1.obj del "%1.obj" if exist %1.exe del "%1.exe" : ----------------------------------------- : assemble Project.asm into an OBJ file : ----------------------------------------- H:masm32BINml.exe /c /coff "%1.asm" if errorlevel 1 goto errasm : -------------------------------------------------- : link the main OBJ file with the resource OBJ file : -------------------------------------------------- H:masm32BINLINK.EXE /SUBSYSTEM:WINDOWS "%1.obj" rsrc.obj if errorlevel 1 goto errlink dir "%1.*" goto TheEnd :errlink : ---------------------------------------------------- : display message if there is an error during linking : ---------------------------------------------------- echo. echo There has been an error while linking this project. echo. goto TheEnd :errasm : ----------------------------------------------------- : display message if there is an error during assembly : ----------------------------------------------------- echo. echo There has been an error while assembling this project. echo. goto TheEnd :TheEnd pause
Но ты не стесняйся, пешы естчо, у тебя всё равно лучшеватей получается, нопремер ;о)
2
- Статус темы:
-
Закрыта.
Страница 1 из 2
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
Уже второй час ночи, меня плющит.
Вроде(!) все правильно написано, а компилятор ругается так:
error A2006: undefined symbol : h_addr_list
сам код:
-
mov eax,(hostent PTR [eax]).h_addr_list
структура разумееться нигде не определена, и как мне кажеться это не требуеться в данной ситуации.
Конечно где-то есть ошибка.
-
kaspersky
New Member
- Публикаций:
-
0
- Регистрация:
- 18 май 2004
- Сообщения:
- 3.006
> структура разумееться нигде не определена,
> и как мне кажеться это не требуеться в данной ситуации.
все-таки она где-то определена, иначе бы транслятор ругнался на hostent, а вот h_addr_list уже не определен.
попробуй дать вместо этого h_addr или посмори inc-файл (просто у меня его сейсас нет под рукой и я не помню как точно это поле там определяется)
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
kaspersky
> посмори inc-файл
Да и в правду в windows.inc в масме ее элемент h_addr_list определен как h_list. Странно, должно ведь быть то что я пишу, а там совсем другое.
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
Проблемка тут такая вылезла странная…
После перехода на sin1 прога падает (вылетает без сообщений). Кто бы мог сказать что здесь неверно?
-
invoke gethostbyname,offset UServer ;здесь 100% домен
-
mov eax,(hostent PTR [eax]).h_list ;вероятно здесь ошибка
-
NoName
-
mov eax,(hostent PTR [eax]).h_list ;вероятно здесь ошибка
Тебе, наверное, нада так:
-
INVOKE gethostbyname,addr Bufer
-
mov eax,[eax] ;Get IP address
-
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
AEX CHECKER
да, я это уже сам понял.
Вот немножко переделанный код, зараннее извиняюсь за ламеризм. Проблема теперь в том, что вместо ип он мне пишет какой-то бред. Я вывожу HIP окно, но там вместо ip появляются китайские заклинания.
-
invoke ntohl,eax ;что с этим, что без этого — одно и тоже.
-
mov iad.S_un.S_addr,eax ;in_addr struct
-
invoke inet_ntoa,offset iad
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
Вообще тут видел ссылку на dns-mx. Сейчас пытаюсь разобраться в том коде, очень неплохой пример.
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
Проблему до сих пор не решил. Вместо ип адреса мне выпадает dx4. Я подумал что это «спец.» код, но в доках этого похоже нигде нет. Ищем.
-
pas
New Member
- Публикаций:
-
0
- Регистрация:
- 18 апр 2003
- Сообщения:
- 330
- Адрес:
- Russia
NoName
-
invoke connect,[hSock],SA,SA.size
Вот такое у меня работает. Структура hs.h_list ассациирована с регистром ebx.
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
Мне необходимо получить ип в локальном, а не сетевом виде, но подключиться это не проблема.
Если будешь писать исходники приписывай как ассоциируешь тот же ebx, а то я могу непонять.
Спасибо.
-
pas
New Member
- Публикаций:
-
0
- Регистрация:
- 18 апр 2003
- Сообщения:
- 330
- Адрес:
- Russia
NoName
virtual at ebx
hs hostent
end virtual
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
А нет ли разницы что передавать ф-ции gethostbyname?
Т.е. адрес строки или указатель на элемент структуры hostent.
Я вот тут посмотрел справочник и стал сомневаться в разумности некоторых авторов пишущих про сокеты…
-
pas
New Member
- Публикаций:
-
0
- Регистрация:
- 18 апр 2003
- Сообщения:
- 330
- Адрес:
- Russia
NoName
Никакой, ИМХО, вообще передаваемый указатель рассматривается как адрес памяти, в которую необходимо, что то записать в определённой последовательности.
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
pas
По твоему простая String equ h_addr_list (A NULL-terminated list of addresses for the host. Addresses are returned in network byte order.)?
Если да, то я уже во всем путаюсь и ничего абсолютно непонимаю в сокетах!
-
pas
New Member
- Публикаций:
-
0
- Регистрация:
- 18 апр 2003
- Сообщения:
- 330
- Адрес:
- Russia
Я прогнал конкретно :-(. gethostbyname получает указатель на имя хоста, а возвращает указатель на структуру hostent. Т.е. здесь передаваемый и возвращаемый указатель не одно и тоже.
-
NoName
New Member
- Публикаций:
-
0
- Регистрация:
- 1 авг 2004
- Сообщения:
- 1.229
да, ясно, но все равно проблема с получением ип адреса хоста посредством gethosybyname зная домен сервера не решена. Также теперь неясно в каком виде нужно передавать строку.
Люди расскажите кто-нибудь как пошагово получить ип.
Т.е. мне интересно какую строку нуэно передавать функции и что потом делать с параметрами hostent’a чтобы получить ip в ТЕКСТОВОМ виде. Я пошу так потому что уже запутался — в одних источниках написано одно, а в других другое.
-
pas
New Member
- Публикаций:
-
0
- Регистрация:
- 18 апр 2003
- Сообщения:
- 330
- Адрес:
- Russia
Ниже приведён кусок кода, который получает строку типа mail.raid.ru из EDIT-а и по ней получает IP, потом преобразует его в строковое представление и выводит в EDIT.
-
invoke GetWindowText,[hName],buf,200
-
invoke WSAStartup,0101h,wsd
-
invoke MessageBox,0,err,err,MB_OK
-
invoke MessageBox,0,err1,err1,MB_OK
-
invoke SetWindowText,[hIP],eax
-
q_q
New Member
- Публикаций:
-
0
- Регистрация:
- 5 окт 2003
- Сообщения:
- 1.706
NoName
ип адреса хоста … зная домен сервера
Не совсем понял твою терминологию. Если аттач не по теме, то не ругай.
-
q_q
New Member
- Публикаций:
-
0
- Регистрация:
- 5 окт 2003
- Сообщения:
- 1.706
Страница 1 из 2
- Статус темы:
-
Закрыта.
MessageBox
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Вот я забыл как делается такая фтучко |
Катька |
|
Не понятно, что требуется, переформулируй вопрос, пожалуйста Добавлено 06.12.07, 16:21 .if ax==TRUE ….. .else ….. оно ? Добавлено 06.12.07, 16:22 |
Dimon-z |
|
да оно,но только мне нуна,если только я нажал на ок |
Катька |
|
Цитата Dimon-z @ 06.12.07, 16:32 да оно,но только мне нуна,если только я нажал на ок ax==TRUE(ok) |
Dimon-z |
|
.IF uMsg==WM_CLOSE |
Катька |
|
Цитата Dimon-z @ 06.12.07, 16:41 .IF ax==TRUE(ok)
гыгы |
Dimon-z |
|
я ставил,я понял что типо коммента =)то я скопирывал…я вставлял тру,и пофиг…пробывал фалс и отмену тоже пофиг…на любую кнопочгу клачаеш и закрываеццо |
Катька |
|
Dimon-z, покажи весь код, тогда смогу помочь. Добавлено 06.12.07, 17:08 Цитата Dimon-z @ 06.12.07, 16:57 я ставил,я понял что типо коммента =)то я скопирывал… да и по ошибке Цитата Dimon-z @ 06.12.07, 16:41 error A2006: undefined symbol : ok
не сказала бы, что ты не написал ok Добавлено 06.12.07, 17:17 Цитата Dimon-z @ 06.12.07, 16:41 .IF ax==TRUE(ok) идёт ? |
quotter |
|
Member Рейтинг (т): 22 |
invoke MessageBox,NULL,ADDR MsgText,ADDR MsgTitle,MB_OK or MB_YESNO .IF ax==TRUE invoke PostQuitMessage,NULL .ENDIF invoke PostQuitMessage,NULL ;<— а это зачем? |
Dimon-z |
|
вот процедура WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT LOCAL rect:RECT .IF uMsg==WM_CLOSE invoke MessageBox,NULL,ADDR MsgText,ADDR MsgTitle,MB_OKCANCEL .IF ax==TRUE invoke PostQuitMessage,NULL .ENDIF .ELSE .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_PAINT invoke BeginPaint,hWnd,Addr ps mov hdc,eax invoke GetClientRect,hWnd,Addr rect invoke DrawText, hdc,Addr MsgText,-1,Addr rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER invoke EndPaint,hWnd, ADDR ps .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF .ENDIF xor eax,eax ret WndProc endp Добавлено 06.12.07, 17:25 Сообщение отредактировано: Dimon-z — 06.12.07, 17:26 |
Катька |
|
Цитата Dimon-z @ 06.12.07, 17:20 это было в самом начале насчёт ок,я не обратил внимания…а потом пнял =)
понятно .IF uMsg==WM_CLOSE invoke MessageBox,NULL,ADDR MsgText,ADDR MsgTitle,MB_OKCANCEL .IF ax==TRUE invoke PostQuitMessage,NULL .ENDIF ;invoke PostQuitMessage,NULL .elseIF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_PAINT invoke BeginPaint,hWnd,Addr ps mov hdc,eax invoke GetClientRect,hWnd,Addr rect invoke DrawText, hdc,Addr MsgText,-1,Addr rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER invoke EndPaint,hWnd, ADDR ps .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start |
Dimon-z |
|
спасибо,а собственно где ошибка была? ;invoke PostQuitMessage,NULL всё равно такаяже фигня была… |
quotter |
|
Member Рейтинг (т): 22 |
Цитата Dimon-z @ 06.12.07, 17:33 всё равно такаяже фигня была… я у себя откомпилил — все работает. по ОК окошко остается, по отмене — закрывается Добавлено 06.12.07, 17:38 |
Катька |
|
Цитата quotter @ 06.12.07, 17:37 по ОК окошко остается, по отмене — закрывается
смешно, по-моему должно быть наоборот Цитата Dimon-z @ 06.12.07, 17:33 где ошибка была? в логических конструкциях. Просто, чтобы ты не нажал у тебя всё равно уничтожение окна .ELSE .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg==WM_PAINT поэтому нужно закрывать условные блоки правильно, и следить за логикой программы Добавлено 06.12.07, 17:43 Цитата quotter @ 06.12.07, 17:37 то есть наоборот
|
Dimon-z |
|
спасибо,Катька лови плюсиГ |
Катька |
|
и здесь ещё Цитата quotter @ 06.12.07, 17:23 MB_OK or MB_YESNO во первых не поняла почему или то или то Добавлено 06.12.07, 17:46 Цитата Dimon-z @ 06.12.07, 17:45 спасибо,Катька лови плюсиГ
да ладно, не за что |
quotter |
|
Member Рейтинг (т): 22 |
Цитата Катька @ 06.12.07, 17:45 во первых не поняла почему или то или то это я скопировал из поста Dimon-z, не обратив внимания |
Катька |
|
Цитата quotter @ 06.12.07, 17:55 это я скопировал из поста Dimon-z, не обратив внимания
да я понимаю, просто он своё сообщение отредактировал, поэтому процетировала — твоё Добавлено 06.12.07, 18:20 |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Assembler
- Следующая тема
[ Script execution time: 0,0550 ] [ 15 queries used ] [ Generated: 9.02.23, 11:54 GMT ]