writeconsoleA

Тема в разделе "WASM.BEGINNERS", создана пользователем dadsa, 30 окт 2011.

  1. dadsa

    dadsa New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2011
    Сообщения:
    15
    можно ли увидеть результат работы функции WriteConsoleA
     
  2. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Код (Text):
    1. #include <windows.h>
    2.  
    3. void main(void)
    4. {
    5.  char *lpBuffer="Hello, World!\n";
    6.  DWORD dw;
    7.  WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE), lpBuffer, lstrlenA(lpBuffer), &dw, NULL);
    8. }
     
  3. dadsa

    dadsa New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2011
    Сообщения:
    15
    что не так ?
    открыл консоль (win>выполнить>cmd)
    оттуда exe :
    .386
    .model flat, stdcall
    option casemap:none
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib
    .data
    stdout dd ?
    msg db "Ќjkjhkjпаа34!",0dh,0ah
    cWritten dd ?
    .code
    start:
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov stdout, eax
    nx:
    invoke WriteConsoleA, stdout, ADDR msg, \
    sizeof msg, ADDR cWritten, NULL
    jmp nx
    end start
    ничего нигде не отображается
     
  4. dadsa

    dadsa New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2011
    Сообщения:
    15
    это вроде C
     
  5. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    или указать при линковке сабсистем консоль
    или вызвать BOOL WINAPI AllocConsole(void);
     
  6. dadsa

    dadsa New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2011
    Сообщения:
    15
    спасибо
     
  7. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Да. Но смысл тот же, что и в посте kernel16.
     
  8. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    [оффтоп]
    не вижу ничего, что указывает на параметры линковки или привязки к процессу консоли...
    эдд: за исключением прототипа фнк. main
     
  9. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    [оффтоп]
    dadsa
    Си знать надо по-любому.
     
  10. dadsa

    dadsa New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2011
    Сообщения:
    15
    это да)) но наверно правильнее начинать с ассемблера
     
  11. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Тут неважно, с чего начинать. Си - обычный язык для описания алгоритмов, его следует хотя бы понимать.
     
  12. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    я понял синтаксис С, изучая примеры ,когда учил асм:lol:
     
  13. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Ну почитай RTFM.

    Именно сигнатура (прототип) ф-ции - точки входа и определяет SUBSYSTEM проги. По дефолту, если точка входа - main, то будет генериться консольная прога (/SUBSYSTEM:CONSOLE), если WinMain - GUI прога (/SUBSYSTEM:WINDOWS), etc. (ну если ты в настройках линкера не указал чего-то другого)

    Т.е., в MSVS линкер сам определяет, какую прогу компилить. И "на параметры линковки или привязки к процессу консоли" указывает именно сигнатура точки входа (main, WinMain, etc.).
     
  14. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Правильнее начинать с ЯВУ (с, паскаль). А уж после этого - asm.
     
  15. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    [Стерто]

    Короче, у меня насчет этого большие сомнения, есть тут еще спецы по линкеру и его опциям?
     
  16. serrox

    serrox New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2011
    Сообщения:
    10
    спецом себя назвать не могу, но MSVC думает так, на сколько я знаю.
    +если из графического интерфейса компилишь, то там в свойствах то ли проекта, то ли солюшена есть пункт подсистема, где указывается явно.
     
  17. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    м-м-м-да.... krid24, вы действительно правы. если не указать в параметрах проекта точку входа и указать подсистему "не задано", то он сам ищет точку входа.
     
  18. dadsa

    dadsa New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2011
    Сообщения:
    15
    правильнее для чего?
     
  19. dadsa

    dadsa New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2011
    Сообщения:
    15
    если вводить в консоль символы с клавиатуры через
    функцию ReadConsole и сохранять первые 3 параметра
    для чего функции WriteConsoleA число введённых с клавиатуры символов
    BSIZE equ 3
    .data
    buf db BSIZE dup(?)
    stdout dd ?
    stdin dd ?
    .code
    start:
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov stdout, eax
    invoke GetStdHandle, STD_INPUT_HANDLE
    mov stdin, eax
    New:
    invoke ReadConsole, stdin, ADDR buf,\
    BSIZE, NULL, NULL
    invoke WriteConsoleA, stdout, ADDR buf,\
    BSIZE, NULL, NULL
    JMP New
    end start
     
  20. kernel16

    kernel16 Human Vl

    Публикаций:
    0
    Регистрация:
    29 окт 2010
    Сообщения:
    316
    простите, ничего не понял... но машинально понял, что код "должен"(в чём я не уверен) выводить то, что ввели. а ей надо это число, чтобы вывести ровно столько символов, сколько ввели(мы же можем ввести всего один символ, а при первом запуске в буфере будет стековой мусор)

    и функции надо давать всё, что она требует.