Обновить
8K+
163
Евгений@JordanCpp

Разработчик

11,1
Рейтинг
145
Подписчики
Отправить сообщение

Да это дубль, новости. Но приятно, что кто то потрудился и запостил.

А tcc соберёт вашу либу?

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

Убрал вызов vc6, это я просто его батник за базу использовал.

Я получил обратную связь всем большое спасибо.

Планы на 0.1.1
1. Исправление замечаний по коду, особенно нужно поправить код на WinAPI проблема с созданием и пропусков событий, так же при создании нужно хитрее следить за размерами окна.
2. Рефакторинг cmake, добавить опции сборки и о умолчанию собирать dll/so с возможностью установки.
3. Доделать тесты.
4. Исправить ворнинги на максимальных уровнях предупреждений.
5. Дополнительные сборки на разных компиляторах.
6. Начать делать документацию (ИИ + doxygen)

Будет достаточно создать биндинг к нужным языкам.

Я в процессе создания ООП обертки для с++. Потом биндинг к freepascal, delphi.

В планах без ограничений биндинги к большинству распространенных языков, питон, Раст, Зиг, С# и т.д

Спасибо большое за комментарий. Я обязательно исправлю все замечания. Как же хорошо ИИ анализирует код.

Подскажите, что это за ИИ? Такой подробный отчёт мне нравится.

Специфичные инструкции включаются, отключаются опциями компилятора. Проблем с ними нет.

GL работает так же просто я делаю бинд функци из opengl системы на свои объявления в библиотеке. Тоже самое будет работать для vk, dx.

Что бы быть заменой SDL, нужно по крайней мере соответствовать функционалу SDL, сейчас это даже не рядом, мягко выражаясь:) Опрометчиво с моей стороны писать, догоним и перегоним:)

Зависимость всегда есть. Что я сделал что бы минимизировать.

  1. С89 не требует лишних либ только libc.

  2. Весь код укладывается в стандарт С89 и ограниченный набор функций libc.

  3. Для win9x используется набор старых функций доступных с windows 95 и выше.

  4. Аналогично для linux, и bsd.

  5. OpenGL это просто мною объявленные функции и при загрузке встроенный загрузчик загружает нужные функции в зависимости от версии. Я не завишу от заголовков типа gl.h и подобного. Все мое.

  6. Если в компиляторе нет поддержки stdbool или stdint, я реализую единый файл через ifdef с проверкой если нет, то реализую typedef сам, если есть использую стандартные.

  7. Не использую компиляторо специфичного кода. Код собирается как с89 или выше. Или как С++. Не просто С++ компилятором как си, а именно как С++ код.

Пример для порта под debian 3 я использовал старую функцию времени и это позволило работать на старых дистрах. На новых уже выпили. В будущем я сделаю проверку и буду использовать на старых старую функцию, на новых новую.

Я думаю напишу с пятью об этом и более подробно расскажу и покажу на примерах. Так как тема интересная.

Как дойду до vulkan, так же сделаю набор функций совместимый, который можно из вне установить. Что бы не было жёсткой зависимости от vulkan sdk.

Я сделал такой заголовок для windows версий. Проверяю есть ли необходимые дефайны. Если нет то объявляю.

Обязательно проверю на tcc.

/*
Copyright(C) 2026 Evgeny Zoshchuk (JordanCpp)

This library is free software; you can redistribute it and /or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.See the GNU Lesser General Public
License for more details.
*/

#ifndef LDL_Win9X_WinX_hpp
#define LDL_Win9X_WinX_hpp

#ifdef NOMINMAX
    #include <windows.h>
#else
    #define NOMINMAX
    #include <windows.h>
    #undef NOMINMAX
#endif

#if !defined INVALID_SET_FILE_POINTER
    #define INVALID_SET_FILE_POINTER ((DWORD)-1)
#endif

#if !defined INVALID_ATOM
    #define INVALID_ATOM ((ATOM)0)
#endif

#if !defined INVALID_FILE_ATTRIBUTES
    #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
#endif

#if !defined VK_OEM_1
    #define VK_OEM_1 0xBA
#endif

#if !defined VK_OEM_2
    #define VK_OEM_2 0xBF
#endif

#if !defined VK_OEM_3
    #define VK_OEM_3 0xC0
#endif

#if !defined VK_OEM_4
    #define VK_OEM_4 0xDB
#endif

#if !defined VK_OEM_5
    #define VK_OEM_5 0xDC
#endif

#if !defined VK_OEM_6
    #define VK_OEM_6 0xDD
#endif

#if !defined VK_OEM_7
    #define VK_OEM_7 0xDE
#endif

#if !defined VK_OEM_PLUS
    #define VK_OEM_PLUS 0xBB
#endif

#if !defined VK_OEM_COMMA
    #define VK_OEM_COMMA 0xBC
#endif

#if !defined VK_OEM_MINUS
    #define VK_OEM_MINUS 0xBD
#endif

#if !defined VK_OEM_PERIOD
    #define VK_OEM_PERIOD 0xBE
#endif

#if !defined WM_MOUSEWHEEL
    #define WM_MOUSEWHEEL 0x020A
#endif

#if !defined WM_MOUSEHWHEEL
    #define WM_MOUSEHWHEEL 0x020E
#endif

#ifndef GET_WHEEL_DELTA_WPARAM
    #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
#endif

#endif

Я начал для LDL делать обёртку на С++ 98 и Modern C++. И думаю, что в следующей статье могу показать современный С++ + LDL + msvc 2026 + линкер для vc6.

Используя современное обеспечить совместимость в том числе и со старыми системами.

С++ никуда не уходит.

Я обязательно сделаю марафон по сборке на разных компиляторах, в том числе и старых.

Не тестировал. Но попробую. Так как код С89, без специфичных расширений, по идее должно собираться.

Пример получающегося C API

#include <LDL/LDL.h>
#include <stdio.h>

int main()
{
    LDL_Result* result = LDL_ResultNew();
    LDL_Window* window;

    if (result)
    {
        window = LDL_WindowNew(result, LDL_GetVec2i(0, 0), LDL_GetVec2i(800, 600), "", 0);

        if (LDL_ResultIsOk(result))
        {
            LDL_Event event;

            while (LDL_WindowIsRunning(window))
            {
                while (LDL_WindowGetEvent(window, &event))
                {
                    if (event.Type == LDL_EventIsQuit)
                    {
                        LDL_WindowStopEvent(window);
                    }
                }
            }
        }
        else
        {
            printf("LDL result error: %s\n", LDL_ResultGetMessage(result));
        }

        LDL_ResultFree(result);
        LDL_WindowFree(window);
    }

    return 0;
}

Это пост. Новость будет когда опубликую первую версию.

Я сейчас доделываю события и окно. Код на С++ есть. Сейчас я именно переношу его на С89.

Пока не готово.

Уточню, поверх С API, будет сопременная С++ обёртка в ООП. С умными указателями, namespace и т.д

Нужно ублажить:

  1. ИИ, что бы он не отсеял ваше резюме

  2. HR что бы обратил внимание и заинтересовался

  3. Ещё раз HR на созвоне, что просто согласовать, а даст ли она шанс на собес

  4. На собесе прогера по алгосам

  5. Скорее всего ещё один собес по алгосам

  6. Скорее всего будет техлид/архитектор

  7. Возможно созвон с HR который будет сбивать цену

  8. Ожидание ответа с периодическим звонком от HR

И возможно, после всего вас возьмут и вы будете перекладывать json в json. Бадум тыц...

То что описано в статье это базовый минимум или роскошный максимум?:))

Я думаю просто не трогать сильного разработчика. Пусть пишет и радует компанию закрытыми задачами.

Спасибо за статью.

Интерфейс от Microsoft конечно всегда всратый, сложный и непонятный. Если уж с этим api работать, то обернуть в С++ классы.

1
23 ...

Информация

В рейтинге
680-й
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Разработчик баз данных
Ведущий
SQL
Linux