tut35

Тема в разделе "WASM.BEGINNERS", создана пользователем driver, 10 дек 2008.

  1. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    кто-нибудь смог довести его до ума?

    нашёл несколько ... странностей :

    LOCAL buffer[1024*10]:BYTE - этот фокус не проходит...

    и вообще - обработчик сабклассированного РичЭдита какой-то не такой :

    NewRichEditProc proc hWnd:lol: WORD, uMsg:lol: WORD, wParam:lol: WORD, lParam:lol: WORD


    и дальше пошли -

    invoke SendMessage,hWnd,EM_LINEFROMCHAR,eax,0
    invoke SendMessage,hWnd,EM_LINEINDEX,eax,0

    и так далее ... не может этого быть ...

    может гуру смогут ненадолго отвлечься от перехватов и взглядов изнутри ? и помочь начинающему перспективному российскому програмисту - и значит всем начинающим, которые есть и ещё долго будут начинать...
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    http://win32assembly.online.fr/tut35.html
    тут полный код

    Что вам тут не нравится?
    Главное не забыть слинковать с опцией /STACK:2000000,2000000

    Все тут верно
    WinProcCallBack прототип схож с мсдн-овским
    hWnd как раз того ричэдита, который сабклассируют.

    Больше конкретики. Что у вас не выходит?
     
  3. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    может деёствительно - зависит от опций компиляции?


    я всё делаю в Масм Билдере, там :
    /v rsrc.rc
    /machine:ix86 rsrc.res
    /c /coff %1.asm
    /SUBSYSTEM:WINDOWS %1.obj rsrc.obj

    и всегда было ок...

    дальше : программа падает от WordFileName db "\wordfile.txt",0 ,нужно вроде просто "wordfile.txt",0

    LOCAL buffer[1024*10]:BYTE - компилируется, но в этом месте программа опять падает..

    короче, нивкакую
    к ту же я встроил ричэдит в другую программу, и он занимает не всю клиентскую область да и - hWnd - глобальная переменная, хэндл главного окна, так что пришлось NewRichEditProc переделать...

    Но это всё неважно.. все исходники уроков ( почти) компилируются, 35-й - НЕТ, это не может быть нормальным явлением, все попытки выяснить - почему, упираются либо в молчание либо ... ладно... спасибо за участие ...тема закрыта ...надоело..
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    driver
    А чего сразу закрывать, давайте спокойно разберемся.
    1) по поводу компиляции
    Беру код из той ссылки, что давал выше. Открываю радасм. Делаю проект. Копирую код и файл рессурсов.
    Компиляция самая дефолтная
    ML.EXE /c /coff /Cp /nologo /I"$I
    У линкера опции следующие
    LINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:"$L"
    Далее НЕЗАБЫВАЕМ в линкере указать
    Код (Text):
    1. /STACK:2000000,2000000
    Как я и писал. В радасме я не смог его добавить (ему не нравится запятая, а по другому так и не въехал), так что линковал через *.bat файл.
    Проект собрался.
    \wordfile.txt так и оставляется. Почему? Да потому, что если вы читали исходник, то там вначале вызывается
    GetModuleFileName, потом после нехитрых действий, выполняется
    invoke lstrcat,addr buffer,addr WordFileName
    И без черточки слева, вы получите "ИМЯдиректорииФАЙЛ.тхт"
    А теперь про падения.
    1) падает на WordFileName говорите? В каком месте? А отладить? Я думаю вы с оллидебаг знакомы.
    2) LOCAL buffer[1024*10]:BYTE - компилируется, но в этом месте программа опять падает..
    Это место решается указанием размера стека в линкере. Читайте внимательнее.
    Покажите где в исходнике hWnd глобальная? Ладно я щас тупо скопирую .data?
    Код (Text):
    1. hInstance dd ?
    2. hRichEdit dd ?
    3. hwndRichEdit dd ?
    4. FileName db 256 dup(?)
    5. AlternateFileName db 256 dup(?)
    6. CustomColors dd 16 dup(?)
    7. FindBuffer db 256 dup(?)
    8. ReplaceBuffer db 256 dup(?)
    9. uFlags dd ?
    10. findtext FINDTEXTEX <>
    11. ASMSyntaxArray dd 256 dup(?)
    12. hSearch dd ?        ; handle to the search/replace dialog box
    13. hAccel dd ?
    14. hMainHeap dd ?      ; heap handle
    15. OldWndProc dd ?
    16. RichEditVersion dd ?
    В упор не вижу hWnd в глобале.

    А теперь по поводу "молчания либо ...". Если вам советуют, извольте прочитать внимательно и вдуматься. Неужели трудно открыть ссылку, взять оттуда код, скопировать. Собрать учитывая опции линкера, создать файл wordfile.txt, напихать туда данных, как это делал ICZELION и дальше проверить.
     
  5. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    в проге, куда я вставил ричэдит, hWnd - хэндл окна, это я переделал - изменил хэндл в обработчике

    /STACK:2000000,2000000 - тут виноват, не имею представления куда это вставлять, не было такой надобности
    Сделал пока LOCAL buffer[4088]:BYTE , при меньших значения буфер переполняется при скроллинге...

    Дошёл до того. что комментирии - зелёные, всё остальное как было, щас ещё поразбираюсь немножко...
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    driver
    Код (Text):
    1. /STACK:2000000,2000000 - тут виноват, не имею представления куда это вставлять, не было такой надобности
    Еще раз повторюсь. В опции линкера. тогда не будет проблемы с LOCAL buffer[1024*10]:BYTE и переполнениями.
    В общем я дал пошаговое указание что делать. Вот пробуйте.
     
  7. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    lstrcat,addr buffer,addr WordFileName, да , но перед этим - mov al,"\"

    если WordFileName db "\wordfile.txt",0 программа умрёт не успев пикнуть

    подсвечиваются только комментраии, где-то ошибка


    Я НЕ ВЕРЮ, что исходник на сайте и по ссылке - компилируется и исполняемый файл работает нормально... НЕ ВЕРЮ ... при всём уважении и так далее...
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Сделаем проще, я прикладываю Свой так сказать прожект
    Там асм, rc , оbj, exe, txt файлы. Еще прикрепил link.bat
    Вам останется тока пути поменять к инклюдам и либам (в bat файле тоже к либам изменяем путь)
    Можете даже сравнить посимвольно asm файлы.
     
  9. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    асм-файла нет - это прикол такой? смешно...
     
  10. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Пардон. Думал он там..
     
  11. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    ещё один вопрос - какие опции и куда нужно вставить, что бы компиоятор и линкер забили на тот факт, что у некоторых ( разных) сообщений одинаковые числовые эквиваленты?
    у меня меню просто йок, без объяснения причин...

    сейчас начну учиться компилить с помощью батника, чего раньше никогда не делал по причине отсутствия необходимости...
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Пример в студию, такого кода, который у вас не работает. И вообще поподробнее.
    С этого нужно было начинать изучение ассемблера да и вообще компьютера. А то привыкли мышку юзать, интерфейсы всякие графические...