Пакет MASM64. Готовые наработки

Тема в разделе "WASM.X64", создана пользователем Mikl___, 22 мар 2026.

  1. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    554

    Еще одна интересная игра. Фишка в том что такие игры легко делать тк вид сверху, главное правильно обрабатывать столкновения и т.д. Ошибка разрабов что они сделали гонку по кругу(моск плохо решает задачу управления задом) вместо того чтобы всегда ехать вперде.
    --- Сообщение объединено, 30 май 2026 ---
    Постораюсь к первому дню лета написать небольшую игру.
     
  2. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    478
    А на каком языке ? MASM x64, FASM x64, CИ x64 ? Или опять на дурацком Паскале/Делфи ? :)

    P.S. Не в службу, а в дружбу. :) Проверьте пожалуйста, кому не трудно, сайт https://www.codeproject.com/. Работает или нет ? Похоже, что опять у нас провайдер его с чем-то перепутал и заблокировал. Абсолютно безобидный ресурс/сайт.
     
  3. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    554
    А в чем он дурацкий? Единственный минус это отсутствие 64 в старых версиях и всратые новые.
    На нем можно без крови из задницы спокойно сделать хеллворд в 830 байт. obj собирается линкером от ms.

    Неа.

    python/delphi 7. Основная задача: понять как сделать не отрисовку игры, а движок из Г&П.

    Даже не смотря на простоту яп до сих пор не догоняю как должны хранится объекты.
    Это не шашки с игровым полем 10 x 10.

    Начало игры есть, но дипсик говорит что:

    нельзя ее публиковать, тк она будет нарушать сразу неск. законов =/

    Да, описанная вами игра **с высокой вероятностью нарушает несколько законов Российской Федерации**. Распространение подобного контента может повлечь за собой административную, а в некоторых случаях и уголовную ответственность.
    Вот подробный разбор того, почему эта игра находится вне закона.
    ### 1. Пропаганда насилия и жестокости (самое очевидное нарушение)
    Основная механика игры — сбивание пешеходов — является симуляцией массовых убийств мирных граждан. Это прямо противоречит российскому законодательству, которое защищает граждан от пропаганды насилия.
    * **Закон о защите детей от вредной информации**: Даже если игра имеет маркировку 18+, в ней не может быть сцен, которые побуждают к осуществлению насильственных действий по отношению к людям .
    * **Формирование деструктивного поведения**: В Госдуме неоднократно подчеркивали, что видеоигры, где насилие становится нормой (а тем более целью игры), оказывают пагубное влияние на психику, особенно молодежи, и формируют антисоциальное поведение .
    ### 2. Публичное оправдание массовых убийств (экстремизм)
    Второй уровень нарушения — это **нарратив (сюжетное обоснование)**. Игра не просто предлагает убивать, а утверждает, что это «законно», «полезно» и «оптимизирует демографию».
    * **Разжигание ненависти (ст. 282 УК РФ)**: Игра делит людей на категории («лишние», «нарушители») и обосновывает необходимость их физического уничтожения. Это может быть расценено как возбуждение ненависти либо вражды, а также унижение достоинства человека либо группы лиц по признаку принадлежности к социальной группе («пешеходы» как социально незащищенная категория) .
    * **Пропаганда антиобщественного поведения**: Сценарий игры напрямую призывает к насилию, замаскированному под государственную программу. Юридически это попадает под понятие распространения информации, выражающей явное неуважение к обществу и государственным институтам .
    ### 3. Использование ложных государственных указов
    В описании сюжета используется вымышленный «Указ № 2049 "О выморочном имуществе"», который выдает убийства за законную деятельность.
    * **Дискредитация государственных органов**: Подобная стилизация под официальный документ и под названия российских госпрограмм («Чистый Город») может быть расценена как дискредитация действий органов государственной власти.
    ### Какие последствия грозят?
    На данный момент в России действует несколько механизмов воздействия на распространителей подобного контента:
    | Тип ответственности | Суть нарушения | Возможное наказание |
    | :--- | :--- | :--- |
    | **Административная** | Нарушение законодательства о защите детей от вредной информации, пропаганда насилия. | Штраф для юридических лиц **до 5 млн рублей** . Конфискация продукции. |
    | **Уголовная** | Возбуждение ненависти либо вражды (ст. 282 УК РФ). | Вплоть до лишения свободы. |
    | **Гражданско-правовая** | Распространение запрещенной информации. | **Блокировка сайта** с игрой на территории РФ по решению Роскомнадзора. |
    ### Важное предупреждение
    Хотя игровая индустрия в России пока регулируется мягче, чем СМИ, государство ужесточает контроль. Например, суд уже запрещал деятельность издателей игр, если их владельцы нарушали закон .
    Ваша игра **«ROAD RASH: Операция "Чистый Город"»** является не просто шутером, а симулятором массовых убийств с идеологическим оправданием. Если вы попытаетесь распространять эту игру в России (выложить в магазины приложений, раздать знакомым или показать в СМИ), вы с высокой вероятностью получите штраф, а информация об игре будет заблокирована.
    **Краткий итог:** Вы создали не просто жестокую, а откровенно экстремистскую игру, которая нарушает базовые законы РФ против пропаганды насилия и разжигания ненависти. Распространять её на территории России нельзя.

    Без всего этого игра ниочем. Душная и без сюжета.
     

    Вложения:

    • Game.rar
      Размер файла:
      2,2 КБ
      Просмотров:
      74
    Последнее редактирование: 31 май 2026
  4. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    478
    Может вот эту Змейку конвертировать из FASM x32 в FASM x64 ? Чтобы был правильный пример кода с соблюдением Windows ABI x64 и т.п...
     
  5. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    554
    Лично для меня это бред. Я хочу понять как можно сделать движок для простой игры а не каждый обьект по отдельности.
    Движок -> общую систему, которая управляет всеми объектами. Масштабируемость - чтобы легко добавить 1000 объектов.
     
    Последнее редактирование: 31 май 2026
  6. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    478
    Да тут дело, вообще, не в игре. Меня, например, игры интересуют - постольку-поскольку. Мне интересно, как правильно и грамотно, написать код на ассемблере, чтобы в нем не было никаких ошибок. Ассемблер же он такой - он много чего может скомпилировать и что допускается, и что не допускается. Имеются в виду, высокоуровневые языки.
     
  7. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    При разработке текстового редактора или среды разработки (IDE) возникает необходимость отображения нумерации строк.

    Стандартный RichEdit (особенно версии 4.1 и ниже) имеет ограничение нумерации примерно в 255 пунктов.

    Историческое наследие: Стандартный элемент управления RichEdit проектировался для работы с небольшими документами и форматированными списками, а не для отображения номеров строк в редакторах кода.

    Решение этой проблемы:
    Код (Pascal):
    1. program MemoSync;
    2.  
    3. uses
    4.   Windows, Messages;
    5.  
    6. const
    7.   ID_TIMER = 1;
    8.  
    9.   MEMO1_WIDTH = 30;
    10.   MEMO2_WIDTH = 300;
    11.  
    12. var
    13.   hMemo1: HWND;
    14.   hMemo2: HWND;
    15.  
    16. // IntToStr (без SysUtils)
    17. function IntToStr(Value: Integer): string;
    18. var
    19.   i: Integer;
    20.   IsNegative: Boolean;
    21.   Buffer: array[0..15] of Char;
    22. begin
    23.   IsNegative := Value < 0;
    24.   if IsNegative then Value := -Value;
    25.   i := 0;
    26.   repeat
    27.     Buffer[i] := Char(Ord('0') + (Value mod 10));
    28.     Value := Value div 10;
    29.     Inc(i);
    30.   until Value = 0;
    31.   if IsNegative then
    32.   begin
    33.     Buffer[i] := '-';
    34.     Inc(i);
    35.   end;
    36.   // –еверсируем строку
    37.   SetLength(Result, i);
    38.   while i > 0 do
    39.   begin
    40.     Dec(i);
    41.     Result[Length(Result) - i] := Buffer[i];
    42.   end;
    43. end; //IntToStr
    44.  
    45. procedure UpdateNumbers;
    46. var  
    47.   Buffer: string;
    48.   SavedLine: Integer;
    49.   i, LineCount: Integer;
    50. begin
    51.   SavedLine := SendMessage(hMemo1, EM_GETFIRSTVISIBLELINE, 0, 0);
    52.   LineCount := SendMessage(hMemo2, EM_GETLINECOUNT, 0, 0);
    53.  
    54.   Buffer := '';
    55.   for i := 1 to LineCount do
    56.   begin
    57.     Buffer := Buffer + IntToStr(i);
    58.     if i < LineCount then
    59.       Buffer := Buffer + #13#10;
    60.   end;
    61.  
    62.   SetWindowText(hMemo1, PChar(Buffer));
    63.   SendMessage(hMemo1, EM_LINESCROLL, 0, SavedLine);
    64. end;
    65.  
    66. procedure ForceSyncScroll;
    67. var
    68.   ScrollInfo: TScrollInfo;
    69.   NewPos: Integer;
    70. begin
    71.   ScrollInfo.cbSize := SizeOf(TScrollInfo);
    72.   ScrollInfo.fMask := SIF_POS or SIF_RANGE or SIF_PAGE;
    73.   GetScrollInfo(hMemo2, SB_VERT, ScrollInfo);
    74.  
    75.   NewPos := ScrollInfo.nPos;
    76.  
    77.   ScrollInfo.nPos := NewPos;
    78.   ScrollInfo.fMask := SIF_POS;
    79.   SetScrollInfo(hMemo1, SB_VERT, ScrollInfo, True);
    80.  
    81.   SendMessage(hMemo1, WM_VSCROLL, SB_THUMBPOSITION + (NewPos shl 16), 0);
    82.   SendMessage(hMemo1, WM_VSCROLL, SB_ENDSCROLL, 0);
    83. end;
    84.  
    85. function MainWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
    86. var
    87.   rect: TRect;
    88. begin
    89.   Result := DefWindowProc(hWnd, Msg, wParam, lParam);
    90.  
    91.   case Msg of
    92.     WM_CREATE:
    93.       begin
    94.         hMemo1 := CreateWindow('EDIT', nil,
    95.           WS_CHILD or WS_VISIBLE or ES_MULTILINE or ES_READONLY,
    96.           10, 10, MEMO1_WIDTH, 300,
    97.           hWnd, 0, HInstance, nil);
    98.    
    99.         hMemo2 := CreateWindow('EDIT', nil,
    100.           WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_MULTILINE,
    101.           10 + MEMO1_WIDTH + 10, 10, MEMO2_WIDTH, 300,
    102.           hWnd, 0, HInstance, nil);
    103.    
    104.         UpdateNumbers;
    105.         SetTimer(hWnd, ID_TIMER, 10, nil);
    106.         SetFocus(hMemo2);
    107.       end;
    108.  
    109.     WM_TIMER:
    110.       begin
    111.         if wParam = ID_TIMER then
    112.           ForceSyncScroll;
    113.       end;
    114.  
    115.     WM_COMMAND:
    116.       begin
    117.         if (HiWord(DWORD(wParam)) = EN_CHANGE) and (lParam = hMemo2) then
    118.         begin
    119.           UpdateNumbers;
    120.           ForceSyncScroll;
    121.         end;
    122.    
    123.         if (HiWord(DWORD(wParam)) = EN_SETFOCUS) and (lParam = hMemo1) then
    124.           SetFocus(hMemo2);
    125.       end;
    126.  
    127.     WM_SIZE:
    128.       begin
    129.         GetClientRect(hWnd, rect);
    130.         MoveWindow(hMemo1, 10, 10, MEMO1_WIDTH, rect.Bottom - 20, True);
    131.         MoveWindow(hMemo2, 10 + MEMO1_WIDTH + 10, 10,
    132.                    rect.Right - (10 + MEMO1_WIDTH + 10) - 10,
    133.                    rect.Bottom - 20, True);
    134.       end;
    135.  
    136.     WM_DESTROY:
    137.       begin
    138.         KillTimer(hWnd, ID_TIMER);
    139.         PostQuitMessage(0);
    140.       end;
    141.   end;
    142. end;
    143.  
    144. var
    145.   msg: TMsg;
    146.   wc: TWndClass;
    147. begin
    148.   FillChar(wc, SizeOf(wc), 0);
    149.   wc.style := CS_HREDRAW or CS_VREDRAW;
    150.   wc.lpfnWndProc := @MainWndProc;
    151.   wc.hInstance := HInstance;
    152.   wc.hbrBackground := COLOR_WINDOW + 1;
    153.   wc.lpszClassName := 'MemoSyncClass';
    154.   RegisterClass(wc);
    155.  
    156.   CreateWindow('MemoSyncClass', 'IDE',
    157.     WS_OVERLAPPEDWINDOW or WS_VISIBLE,
    158.     CW_USEDEFAULT, CW_USEDEFAULT, 500, 300,
    159.     0, 0, HInstance, nil);
    160.  
    161.   while GetMessage(msg, 0, 0, 0) do
    162.   begin
    163.     TranslateMessage(msg);
    164.     DispatchMessage(msg);
    165.   end;
    166. end.
    167.  
    --- Сообщение объединено, 8 июн 2026 ---
    Еще один вариант, нарисовать номера строк с помощью Canvas.
    Код (Pascal):
    1. program MemoSync;
    2.  
    3. uses
    4.   Windows, Messages;
    5.  
    6. const
    7.   ID_TIMER = 1;
    8.  
    9.   LINE_NUMBERS_WIDTH = 40;
    10.   MEMO_WIDTH = 300;
    11.  
    12. var
    13.   hCanvas: HWND;      // Canvas для номеров строк
    14.   hMemo: HWND;        // Основной Memo для кода
    15.   Font: HFONT;       // Шрифт для номеров строк
    16.  
    17. // Своя реализация IntToStr (без SysUtils)
    18. function IntToStr(Value: Integer): string;
    19. var
    20.   i: Integer;
    21.   IsNegative: Boolean;
    22.   Buffer: array[0..15] of Char;
    23. begin
    24.   IsNegative := Value < 0;
    25.   if IsNegative then Value := -Value;
    26.   i := 0;
    27.   repeat
    28.     Buffer[i] := Char(Ord('0') + (Value mod 10));
    29.     Value := Value div 10;
    30.     Inc(i);
    31.   until Value = 0;
    32.   if IsNegative then
    33.   begin
    34.     Buffer[i] := '-';
    35.     Inc(i);
    36.   end;
    37.   SetLength(Result, i);
    38.   while i > 0 do
    39.   begin
    40.     Dec(i);
    41.     Result[Length(Result) - i] := Buffer[i];
    42.   end;
    43. end;
    44.  
    45. // Рисование номеров строк на Canvas
    46. procedure DrawLineNumbers;
    47. var
    48.   Rect: TRect;
    49.   i, LineCount: Integer;
    50.   y, LineHeight: Integer;
    51.   Text: string;
    52.   DC: HDC;
    53.   OldFont: HFONT;
    54.   FirstVisibleLine: Integer;
    55. begin
    56.   if hCanvas = 0 then Exit;
    57.  
    58.   // Получаем DC для Canvas
    59.   DC := GetDC(hCanvas);
    60.  
    61.   // Очищаем фон
    62.   GetClientRect(hCanvas, Rect);
    63.   FillRect(DC, Rect, GetStockObject(LTGRAY_BRUSH));
    64.  
    65.   // Устанавливаем шрифт
    66.   OldFont := SelectObject(DC, Font);
    67.   SetBkMode(DC, TRANSPARENT);
    68.   SetTextColor(DC, RGB(100, 100, 100));
    69.  
    70.   // Получаем количество строк в Memo
    71.   LineCount := SendMessage(hMemo, EM_GETLINECOUNT, 0, 0);
    72.  
    73.   // Получаем первую видимую строку
    74.   FirstVisibleLine := SendMessage(hMemo, EM_GETFIRSTVISIBLELINE, 0, 0);
    75.  
    76.   // Вычисляем высоту строки
    77.   SendMessage(hMemo, EM_GETRECT, 0, LPARAM(@Rect));
    78.   LineHeight := 20; // Примерная высота
    79.  
    80.   // Рисуем номера строк
    81.   y := 5;
    82.   for i := FirstVisibleLine + 1 to LineCount do
    83.   begin
    84.     Text := IntToStr(i);
    85.     TextOut(DC, 5, y, PChar(Text), Length(Text));
    86.     y := y + LineHeight;
    87.    
    88.     // Если вышли за пределы видимой области
    89.     if y > Rect.Bottom then Break;
    90.   end;
    91.  
    92.   // Восстанавливаем шрифт
    93.   SelectObject(DC, OldFont);
    94.   ReleaseDC(hCanvas, DC);
    95. end;
    96.  
    97. // Синхронизация прокрутки
    98. procedure SyncScroll;
    99. var
    100.   ScrollInfo: TScrollInfo;
    101. begin
    102.   // Получаем информацию о прокрутке Memo
    103.   ScrollInfo.cbSize := SizeOf(TScrollInfo);
    104.   ScrollInfo.fMask := SIF_POS;
    105.   GetScrollInfo(hMemo, SB_VERT, ScrollInfo);
    106.  
    107.   // Перерисовываем номера строк
    108.   DrawLineNumbers;
    109.  
    110.   // Принудительно обновляем Canvas
    111.   InvalidateRect(hCanvas, nil, False);
    112. end;
    113.  
    114. // Обработчик сообщений
    115. function MainWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
    116. var
    117.   rect: TRect;
    118.   ps: TPaintStruct;
    119. begin
    120.   Result := DefWindowProc(hWnd, Msg, wParam, lParam);
    121.  
    122.   case Msg of
    123.     WM_CREATE:
    124.       begin
    125.         // Создаем шрифт для номеров строк
    126.         Font := CreateFont(12, 0, 0, 0, 400, 0, 0, 0,
    127.                            DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
    128.                            CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
    129.                            FIXED_PITCH or FF_MODERN, 'Courier New');
    130.        
    131.         // Создаем Canvas для номеров строк
    132.         hCanvas := CreateWindow('STATIC', nil,
    133.                                WS_CHILD or WS_VISIBLE or SS_OWNERDRAW,
    134.                                10, 10, LINE_NUMBERS_WIDTH, 300,
    135.                                hWnd, 0, HInstance, nil);
    136.        
    137.         // Создаем Memo для кода
    138.         hMemo := CreateWindow('EDIT', nil,
    139.                              WS_CHILD or WS_VISIBLE or WS_VSCROLL or ES_MULTILINE,
    140.                              10 + LINE_NUMBERS_WIDTH + 10, 10, MEMO_WIDTH, 300,
    141.                              hWnd, 0, HInstance, nil);
    142.        
    143.         // Устанавливаем шрифт для Memo
    144.         SendMessage(hMemo, WM_SETFONT, Font, 0);
    145.        
    146.         // Устанавливаем таймер для синхронизации
    147.         SetTimer(hWnd, ID_TIMER, 10, nil);
    148.         SetFocus(hMemo);
    149.        
    150.         // Рисуем начальные номера строк
    151.         DrawLineNumbers;
    152.       end;
    153.    
    154.     WM_TIMER:
    155.       begin
    156.         if wParam = ID_TIMER then
    157.           SyncScroll;
    158.       end;
    159.    
    160.     WM_COMMAND:
    161.       begin
    162.         if (HiWord(DWORD(wParam)) = EN_CHANGE) and (lParam = hMemo) then
    163.         begin
    164.           // При изменении текста перерисовываем номера строк
    165.           DrawLineNumbers;
    166.         end;
    167.       end;
    168.    
    169.     WM_SIZE:
    170.       begin
    171.         GetClientRect(hWnd, rect);
    172.         // Изменяем размер Canvas
    173.         MoveWindow(hCanvas, 10, 10, LINE_NUMBERS_WIDTH, rect.Bottom - 20, True);
    174.         // Изменяем размер Memo
    175.         MoveWindow(hMemo, 10 + LINE_NUMBERS_WIDTH + 10, 10,
    176.                    rect.Right - (10 + LINE_NUMBERS_WIDTH + 10) - 10,
    177.                    rect.Bottom - 20, True);
    178.        
    179.         DrawLineNumbers;
    180.       end;
    181.    
    182.     WM_DESTROY:
    183.       begin
    184.         KillTimer(hWnd, ID_TIMER);
    185.         DeleteObject(Font);
    186.         PostQuitMessage(0);
    187.       end;
    188.   end;
    189. end;
    190.  
    191. var  
    192.   msg: TMsg;
    193.   wc: TWndClass;
    194. begin
    195.   FillChar(wc, SizeOf(wc), 0);
    196.   wc.style := CS_HREDRAW or CS_VREDRAW;
    197.   wc.lpfnWndProc := @MainWndProc;
    198.   wc.hInstance := HInstance;
    199.   wc.hbrBackground := COLOR_WINDOW + 1;
    200.   wc.lpszClassName := 'MemoSyncClass';
    201.   RegisterClass(wc);
    202.  
    203.   CreateWindow('MemoSyncClass', 'IDE',
    204.     WS_OVERLAPPEDWINDOW or WS_VISIBLE,
    205.     CW_USEDEFAULT, CW_USEDEFAULT, 500, 300,
    206.     0, 0, HInstance, nil);
    207.  
    208.   while GetMessage(msg, 0, 0, 0) do
    209.   begin
    210.     TranslateMessage(msg);
    211.     DispatchMessage(msg);
    212.   end;
    213. end.
    --- Сообщение объединено, 8 июн 2026 ---
    --- --
    --- Сообщение объединено, 8 июн 2026 ---
    В ближайшее время будет такая open source ide для python'a.
    С вкладками, подсветкой синтаксиса, с запуском скриптов и выводом отладочной инфы.

    С python для меня все понятно, было бы замечательно если бы помогли с этим:

    :)
    --- Сообщение объединено, 8 июн 2026 ---
    Логика такая: если есть готовая ide для python'а, то не составит труда доработать ее для цэ и масма.
     

    Вложения:

    • Memo Sync.rar
      Размер файла:
      9,8 КБ
      Просмотров:
      35
    • Memo Canvas.rar
      Размер файла:
      10,6 КБ
      Просмотров:
      34
  8. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.652
    Tech, тема называется "Пакет MASM64"
    Хотя да, о чем я, спасибо хоть посты с кодом выкладываете, а не с микробиотой и мемасиками ютуба..
     
    Mikl___ нравится это.
  9. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    В 32-битной версии MASM (ML.EXE) существовал набор удобных высокоуровневых конструкций, которые значительно упрощали написание кода, делая его похожим на языки высокого уровня. Эти конструкции были удалены из 64-битного ассемблера MASM (ML64.EXE).
    Microsoft позиционировала 64-битный MASM как более простой инструмент, предназначенный в первую очередь для встраивания ассемблерного кода в код на C++, а не для создания полноценных крупных программ на ассемблере.

    Несмотря на то, что Microsoft убрала эти удобства из своего официального 64-битного ассемблера ML64.EXE, сообщество компенсирует это с помощью макросов. Например, входящий в MASM64 SDK макрос invoke (обратите внимание на строчную букву) эмулирует поведение удаленной директивы INVOKE.

    Таким образом, высокоуровневые возможности были убраны Microsoft из официального инструмента,
    но создатели пакетов вроде MASM64 часто возвращают их обратно с помощью собственных макросов.

    После этого появились макросы от Hutch и Vasily, которые эмулируют поведение 32-битных директив.

    Из-за этого разделения на "официальный" и "народный" MASM часто возникает путаница. Синтаксис может немного различаться. Код, написанный под одну библиотеку макросов, может не собраться под другую. Например, .if и .IF (с большой буквы) могут вести себя по-разному.

    "64-битный MASM умеет в высокоуровневые конструкции" - это правда только наполовину. Сам Microsoft их убрал,
    сообщество их добавило. Однако эти "добавленные" возможности не являются стандартизированными.

    Не знаю верна ли моя догадка. Если с макросами до сих пор такая проблема, то это реальный детектор уровня интереса к масму.
     
    Последнее редактирование: 9 июн 2026
    R81... и Mikl___ нравится это.
  10. Tech

    Tech Member

    Публикаций:
    0
    Регистрация:
    1 апр 2026
    Сообщения:
    34
    2026-06-10_01-11-15.png
    2026-06-10_01-05-24.png

    --- --

    Scite.png

    Пример подключения dll от Scintilla в свой проект.
     

    Вложения:

    • SciTE.rar
      Размер файла:
      282,9 КБ
      Просмотров:
      37
    Последнее редактирование: 10 июн 2026 в 01:16
    R81... и Mikl___ нравится это.
  11. CaptainObvious

    CaptainObvious Member

    Публикаций:
    0
    Регистрация:
    18 янв 2024
    Сообщения:
    111
    Tech
    Не давайте святыни псам и не бросайте жемчуга вашего перед свиньями,
    чтобы они не попрали его ногами своими и, обратившись, не растерзали вас.
     
  12. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    360
    Ещё один философ.. Ты кого здесь свиньями называешь?
    Сам небось ни одну лицензию не купил, а всё бесплатным софтом пользуешься.
    Чучело ты конченое!