Error a2006 undefined symbol messagebox

ASM Community 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 […]

Содержание

  1. ASM Community
  2. Ассемблер MASM не видит функции из «Windows API»-ских библиотек
  3. 1 ответ 1
  4. Error a2006 undefined symbol messagebox
  5. Error a2006 undefined symbol messagebox
  6. Помогите с ассемблером ругается только на 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
1
2
3
4
5
6
7
8
9
10
  ; --------------------------------------------------------
  ; exit macro with an optional return value for ExitProcess
  ; --------------------------------------------------------
    exit MACRO optional_return_value
      IFNDEF optional_return_value
        invoke ExitProcess, 0
      ELSE
        invoke ExitProcess,optional_return_value
      ENDIF
    ENDM

Но вот вопрос: а не маловато ли в твоём уже коде ентих самых ExitProcess’ов и процедур без RET? По-моему, так маловато, а посему взял на себя невероятную смелость скромно дополнить уже твой, чоужтам, гениальный код вот таким образом (не ЧСВ ради, а пользы для: с целью дальнейшего превращения простейшего примера в говнокод, заодно переведя всё что возможно в нижний регистр, как сейчас принято, например ;о):

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.386                                    ; create 32 bit code
.model flat,stdcall                    ; 32 bit memory model
option casemap :none                    ; case sensitive
 
include windows.inc     ; always first
include macros.asm       ; masm support macros
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
includelib masm32.lib
 
.data
szAppInfo   CHAR  "Adding Strings Example",0
szWorld     CHAR  "World!11",0
szHello     CHAR  "Hello,",0
 
.data?
chResult    CHAR  sizeof szHello + sizeof szWorld dup(?)
 
.code
start:
call main
exit
main proc
      call main_mov
      invoke ExitProcess,0
      exit
main endp
main_mov proc
      invoke RtlMoveMemory,addr chResult,addr szHello,sizeof szHello
      call main_lstrcat
      invoke ExitProcess,0
      exit
main_mov endp
main_lstrcat proc
      invoke lstrcat,addr chResult,addr szWorld
      call main_message_box
      invoke ExitProcess,0
      exit
main_lstrcat endp
main_message_box proc
      invoke MessageBox,0,addr chResult,addr szAppInfo,0
      invoke ExitProcess,0
      exit
main_message_box endp
end start

Преимущества такого решения очевидны:
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


  1. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    Уже второй час ночи, меня плющит.

    Вроде(!) все правильно написано, а компилятор ругается так:

    error A2006: undefined symbol : h_addr_list

    сам код:

    1. mov eax,(hostent PTR [eax]).h_addr_list

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

    Конечно где-то есть ошибка.


  2. kaspersky

    kaspersky

    New Member

    Публикаций:

    0

    Регистрация:
    18 май 2004
    Сообщения:
    3.006

    > структура разумееться нигде не определена,

    > и как мне кажеться это не требуеться в данной ситуации.

    все-таки она где-то определена, иначе бы транслятор ругнался на hostent, а вот h_addr_list уже не определен.

    попробуй дать вместо этого h_addr или посмори inc-файл (просто у меня его сейсас нет под рукой и я не помню как точно это поле там определяется)


  3. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    kaspersky

    > посмори inc-файл

    Да и в правду в windows.inc в масме ее элемент h_addr_list определен как h_list. Странно, должно ведь быть то что я пишу, а там совсем другое.


  4. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    Проблемка тут такая вылезла странная…

    После перехода на sin1 прога падает (вылетает без сообщений). Кто бы мог сказать что здесь неверно?

    1. invoke gethostbyname,offset UServer ;здесь 100% домен
    2. mov eax,(hostent PTR [eax]).h_list ;вероятно здесь ошибка
  5. NoName

    1. mov eax,(hostent PTR [eax]).h_list ;вероятно здесь ошибка

    Тебе, наверное, нада так:

    1. INVOKE gethostbyname,addr Bufer
    2. mov    eax,[eax]           ;Get IP address

  6. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    AEX CHECKER

    да, я это уже сам понял.

    Вот немножко переделанный код, зараннее извиняюсь за ламеризм. Проблема теперь в том, что вместо ип он мне пишет какой-то бред. Я вывожу HIP окно, но там вместо ip появляются китайские заклинания.

    1. invoke ntohl,eax ;что с этим, что без этого — одно и тоже.
    2. mov iad.S_un.S_addr,eax ;in_addr struct
    3. invoke inet_ntoa,offset iad

  7. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    Вообще тут видел ссылку на dns-mx. Сейчас пытаюсь разобраться в том коде, очень неплохой пример.


  8. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    Проблему до сих пор не решил. Вместо ип адреса мне выпадает dx4. Я подумал что это «спец.» код, но в доках этого похоже нигде нет. Ищем.


  9. pas

    pas

    New Member

    Публикаций:

    0

    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia

    NoName

    1.          invoke connect,[hSock],SA,SA.size

    Вот такое у меня работает. Структура hs.h_list ассациирована с регистром ebx.


  10. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229


  11. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    Мне необходимо получить ип в локальном, а не сетевом виде, но подключиться это не проблема.

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

    Спасибо.


  12. pas

    pas

    New Member

    Публикаций:

    0

    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia

    NoName

    virtual at ebx

    hs hostent

    end virtual


  13. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    А нет ли разницы что передавать ф-ции gethostbyname?

    Т.е. адрес строки или указатель на элемент структуры hostent.

    Я вот тут посмотрел справочник и стал сомневаться в разумности некоторых авторов пишущих про сокеты…


  14. pas

    pas

    New Member

    Публикаций:

    0

    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia

    NoName

    Никакой, ИМХО, вообще передаваемый указатель рассматривается как адрес памяти, в которую необходимо, что то записать в определённой последовательности.


  15. 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.)?

    Если да, то я уже во всем путаюсь и ничего абсолютно непонимаю в сокетах!


  16. pas

    pas

    New Member

    Публикаций:

    0

    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia

    Я прогнал конкретно :-(. gethostbyname получает указатель на имя хоста, а возвращает указатель на структуру hostent. Т.е. здесь передаваемый и возвращаемый указатель не одно и тоже.


  17. NoName

    NoName

    New Member

    Публикаций:

    0

    Регистрация:
    1 авг 2004
    Сообщения:
    1.229

    да, ясно, но все равно проблема с получением ип адреса хоста посредством gethosybyname зная домен сервера не решена. Также теперь неясно в каком виде нужно передавать строку.

    Люди расскажите кто-нибудь как пошагово получить ип.

    Т.е. мне интересно какую строку нуэно передавать функции и что потом делать с параметрами hostent’a чтобы получить ip в ТЕКСТОВОМ виде. Я пошу так потому что уже запутался — в одних источниках написано одно, а в других другое.


  18. pas

    pas

    New Member

    Публикаций:

    0

    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia

    Ниже приведён кусок кода, который получает строку типа mail.raid.ru из EDIT-а и по ней получает IP, потом преобразует его в строковое представление и выводит в EDIT.

    1. invoke GetWindowText,[hName],buf,200
    2.        invoke WSAStartup,0101h,wsd
    3.        invoke MessageBox,0,err,err,MB_OK
    4.        invoke MessageBox,0,err1,err1,MB_OK
    5.        invoke SetWindowText,[hIP],eax

  19. q_q

    q_q

    New Member

    Публикаций:

    0

    Регистрация:
    5 окт 2003
    Сообщения:
    1.706

    NoName

    ип адреса хоста … зная домен сервера

    Не совсем понял твою терминологию. Если аттач не по теме, то не ругай.


  20. q_q

    q_q

    New Member

    Публикаций:

    0

    Регистрация:
    5 окт 2003
    Сообщения:
    1.706

Страница 1 из 2

Статус темы:

Закрыта.

WASM

>
MessageBox

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему

  


Сообщ.
#1

,
06.12.07, 16:15

    Вот я забыл как делается такая фтучко :D
    например имеем месадж бокс,с MB_OKCANCEL или же там еще с чем-то =)
    так вот,например если я нажимаю Ок,тогда выполняется определённое действие =)
    например закрыть приложение
    Ну как делается с обычными диалогами
    Заркрыть приложение?
    ОкОтмена =)


    Катька



    Сообщ.
    #2

    ,
    06.12.07, 16:19

      Не понятно, что требуется, переформулируй вопрос, пожалуйста

      Добавлено 06.12.07, 16:21

      ExpandedWrap disabled

        .if ax==TRUE

         …..

        .else

         …..

      оно ?

      Добавлено 06.12.07, 16:22
      в ax возвращается, нажал ты ок или cancel


      Dimon-z



      Сообщ.
      #3

      ,
      06.12.07, 16:32

        да оно,но только мне нуна,если только я нажал на ок


        Катька



        Сообщ.
        #4

        ,
        06.12.07, 16:34

          Цитата Dimon-z @ 06.12.07, 16:32

          да оно,но только мне нуна,если только я нажал на ок

          ExpandedWrap disabled

             ax==TRUE(ok)


          Dimon-z



          Сообщ.
          #5

          ,
          06.12.07, 16:41

            .IF uMsg==WM_CLOSE
            invoke MessageBox,NULL,ADDR MsgText,ADDR MsgTitle,MB_OKCANCEL
            .IF ax==TRUE(ok)
            invoke PostQuitMessage,NULL
            .ENDIF
            error A2006: undefined symbol : ok
            Пробывал делать вместо MB_OKCANCEL, 1 и пробывал вместо ax eax==1,всё равно не получается..ну получается,но только если я нажму любую кнопку…а мне нуна только ок :(


            Катька



            Сообщ.
            #6

            ,
            06.12.07, 16:47

              Цитата Dimon-z @ 06.12.07, 16:41

              .IF ax==TRUE(ok)

              гыгы :) да (ok) это типа комментария ;) надо прсото ax==TRUE.


              Dimon-z



              Сообщ.
              #7

              ,
              06.12.07, 16:57

                я ставил,я понял что типо коммента =)то я скопирывал…я вставлял тру,и пофиг…пробывал фалс и отмену тоже пофиг…на любую кнопочгу клачаеш и закрываеццо :(


                Катька



                Сообщ.
                #8

                ,
                06.12.07, 16:59

                  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 :ph34r:

                  Добавлено 06.12.07, 17:17
                  Dimon-z, попробовала всё нормально, что у тебя после

                  Цитата Dimon-z @ 06.12.07, 16:41

                  .IF ax==TRUE(ok)
                  invoke PostQuitMessage,NULL
                  .ENDIF

                  идёт ?


                  quotter



                  Сообщ.
                  #9

                  ,
                  06.12.07, 17:23

                    Member

                    **

                    Рейтинг (т): 22

                    ExpandedWrap disabled

                      invoke MessageBox,NULL,ADDR MsgText,ADDR MsgTitle,MB_OK or MB_YESNO

                      .IF ax==TRUE

                      invoke PostQuitMessage,NULL

                      .ENDIF

                      invoke PostQuitMessage,NULL ;<—  а это зачем?


                    Dimon-z



                    Сообщ.
                    #10

                    ,
                    06.12.07, 17:24

                      вот процедура
                      там где выполняется…
                      думаю полный код не нужен т.к в нём ничего нету такого =)

                      ExpandedWrap disabled

                        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
                      2quotter, то я тупанул чутог =)
                      убрал, но всё равно..

                      Сообщение отредактировано: Dimon-z — 06.12.07, 17:26


                      Катька



                      Сообщ.
                      #11

                      ,
                      06.12.07, 17:29

                        Цитата Dimon-z @ 06.12.07, 17:20

                        это было в самом начале насчёт ок,я не обратил внимания…а потом пнял =)

                        понятно :) ну вот собственно на

                        ExpandedWrap disabled

                          .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



                        Сообщ.
                        #12

                        ,
                        06.12.07, 17:33

                          спасибо,а собственно где ошибка была?
                          просто когда удалил строку

                          ExpandedWrap disabled

                            ;invoke PostQuitMessage,NULL

                          всё равно такаяже фигня была…


                          quotter



                          Сообщ.
                          #13

                          ,
                          06.12.07, 17:37

                            Member

                            **

                            Рейтинг (т): 22

                            Цитата Dimon-z @ 06.12.07, 17:33

                            всё равно такаяже фигня была…

                            я у себя откомпилил — все работает. по ОК окошко остается, по отмене — закрывается

                            Добавлено 06.12.07, 17:38
                            то есть наоборот :)


                            Катька



                            Сообщ.
                            #14

                            ,
                            06.12.07, 17:42

                              Цитата quotter @ 06.12.07, 17:37

                              по ОК окошко остается, по отмене — закрывается

                              смешно, по-моему должно быть наоборот :)

                              Цитата Dimon-z @ 06.12.07, 17:33

                              где ошибка была?

                              в логических конструкциях. Просто, чтобы ты не нажал у тебя всё равно уничтожение окна

                              ExpandedWrap disabled

                                .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



                              Сообщ.
                              #15

                              ,
                              06.12.07, 17:45

                                спасибо,Катька лови плюсиГ


                                Катька



                                Сообщ.
                                #16

                                ,
                                06.12.07, 17:45

                                  и здесь ещё

                                  Цитата quotter @ 06.12.07, 17:23

                                  MB_OK or MB_YESNO

                                  во первых не поняла почему или то или то :) а во-вторых они возвращают отличное значение от
                                  MB_OKCANCEL

                                  Добавлено 06.12.07, 17:46

                                  Цитата Dimon-z @ 06.12.07, 17:45

                                  спасибо,Катька лови плюсиГ

                                  да ладно, не за что ;) обращайся ещё, чем смогу помогу :yes:


                                  quotter



                                  Сообщ.
                                  #17

                                  ,
                                  06.12.07, 17:55

                                    Member

                                    **

                                    Рейтинг (т): 22

                                    Цитата Катька @ 06.12.07, 17:45

                                    во первых не поняла почему или то или то

                                    это я скопировал из поста Dimon-z, не обратив внимания


                                    Катька



                                    Сообщ.
                                    #18

                                    ,
                                    06.12.07, 18:19

                                      Цитата quotter @ 06.12.07, 17:55

                                      это я скопировал из поста Dimon-z, не обратив внимания

                                      да я понимаю, просто он своё сообщение отредактировал, поэтому процетировала — твоё ;) не обращай, внимания ;)

                                      Добавлено 06.12.07, 18:20
                                      В общем, пост 16 был полнстью адресован Димону :)

                                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                      0 пользователей:

                                      • Предыдущая тема
                                      • Assembler
                                      • Следующая тема

                                      [ Script execution time: 0,0550 ]   [ 15 queries used ]   [ Generated: 9.02.23, 11:54 GMT ]  

                                      Понравилась статья? Поделить с друзьями:

                                      Читайте также:

                                    • Error a2005 symbol redefinition
                                    • Error a2004 symbol type conflict
                                    • Error a12 warning
                                    • Error a1 4111 samsung c1810w
                                    • Error a was not declared in this scope перевод

                                    • 0 0 голоса
                                      Рейтинг статьи
                                      Подписаться
                                      Уведомить о
                                      guest

                                      0 комментариев
                                      Старые
                                      Новые Популярные
                                      Межтекстовые Отзывы
                                      Посмотреть все комментарии