Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 1 |

 

  Вопрос: Нужна помощь по асму.. Добавлено: 06.08.05 17:00  

Автор вопроса:  ISpy | Web-сайт: intermult.boom.ru
Изучаю ассемблер. Написал простую программу, кторая получает хэндл окна,
пихает его в переменную и выводит месседжбокс.

Проблема в том, что ничего в messagebox'e не выводится, просто пустое место :(
Вот код, я асм только изучаю, поэтому возможны глупые ошибки, просьба найти где ;)
(компилятор - masm32)


.386
.model flat,stdcall
option casemap:none

MessageBoxA proto :dword,:dword,:dword,:dword

include C:\masm32\include\windows.inc
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\user32.lib

.DATA
AppName db "Our First Window",0

.DATA?
hHWND dd ?

.CODE
CTAPT:

invoke GetModuleHandle, addr AppName
mov hHWND,eax

invoke MessageBoxA,0,addr hHWND,addr AppName,0h


invoke ExitProcess,0

end CTAPT

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #1
Добавлено: 06.08.05 17:02
HMODULE GetModuleHandle(

    LPCTSTR lpModuleName // address of module name to return handle for
   ;);

Да, насчет параметра LPCTSTR: в него надо передавать название exe'шника (пример: "project.exe";) или загаловок окна (пример: "Безымянный - Блокнот";)??

Ответить

Номер ответа: 2
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #2 Добавлено: 06.08.05 19:24
1.
MessageBox в качестве второго параметра принимает адрес СТРОКИ, а не переменной, где хранится хэндл.
Тут всё-таки не VB, который сам за тебя число (hWND) переведёт в строку и её адрес отправит MessageBox'у. Т.е. число (hWnd) нужно сначала преобразовать в строку, а затем адрес строки передавать MessageBox'у.

2.
LPCTSTR - это не параметр. Это тип переменной. Параметр тут lpModuleName - адрес строки, в которой содержится имя модуля, загруженного в память. Это может быть как сам exe, так и любая из dll, которая подружена в память.

Ответить

Номер ответа: 3
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #3 Добавлено: 06.08.05 19:35
Посмотри и проанализируй этот пример:

.data
            module_name db 'user32.dll',0
            fmt         db 'Модуль user32.dll загружен в адресное пространство начиная с адреса %08Xh',0
            hModule     dd 0
            mod_str     db 256 dup(0)
        .code
        
        invoke  GetModuleHandle, addr module_name
        mov     hModule,eax
        invoke  wsprintf, addr mod_str, addr fmt, hModule
        invoke  MessageBox, NULL, addr mod_str, addr module_name, MB_OK

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 06.08.05 22:47
Если тебе нужен hModule твоей программы, в GetModuleHandle передавай NULL

Ответить

Номер ответа: 5
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #5
Добавлено: 07.08.05 12:42
Можно по-подробнее:
-Что такое fmt? Для чего он нужен?
-Опиши какие параметры принимает wsprintf (а то я с английским не очень).

Твой пример выводит: "Модуль user32.dll загружен в адресное пространство начиная с адреса Чр"
Насколько я знаю хэндл - это адрес программы в памяти (исправте если я не прав), Получается "Чр" - это и есть хэндл? Но хэндл вроде это числовое значение, мне и надо число..

Ответить

Номер ответа: 6
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #6
Добавлено: 07.08.05 13:12
Все понял и разобрался.
Надо вместо %08Xh написать %ld и будут цифры :))

p.s. спасибо sne :)

Ответить

Номер ответа: 7
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #7
Добавлено: 07.08.05 13:16
Да, спасибо всем кто отвеча: HOOLIGAN, Sharp :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам