C--

High-level languages programming questions
  • Так уж и быть-в данный момент ковыряюсь в этом примере, убираю ошибки. Ух, Leency, вечно ты меня заставляешь ставить новые рекорды по распределению своего времени. Напомню, именно Leency втянул меня в использование ЯВУ в Колибри, особенно, в связи с совместными программами.
  • Если делать по аналогии с edit_box то

    Code: Select all

    dword ini_get_str = #aini_get_str;
    dword ini_set_str = #aini_set_str;
    dword ini_get_int = #aini_get_int;
    dword ini_set_int = #aini_set_int;
    dword ini_enum_sections = #aini_enum_sections;
    dword ini_enum_keys = #aini_enum_keys;
    dword  am__ = 0x0;
    dword  bm__ = 0x0;
    char aini_get_str[12] = "ini.get_str\0";
    char aini_set_str[12] = "ini.set_str\0";
    char aini_get_int[12] = "ini.get_int\0";
    char aini_set_int[12] = "ini.set_int\0";
    char aini_enum_sections[18] = "ini.enum_sections\0";
    char aini_enum_keys[14] = "ini.enum_keys\0";
    
  • Veliant, у тебя работает?
    я собираю... у меня не работает.. =(...
  • Вчера сделал - пример загружает libini, более того, может грузить любые _стандартные_ библиотеки. box_lib не загрузит, т.к. эта либа не имеет точки входа как таковой, а первый вход в таблице экспортов должен быть точкой входа, которая принимает в eax-ebx-ecx-edx указатели на, соответственно, malloc-free-realloc-DllLoad.
    console.obj тоже не работает, т.к. его точка входа этому не соответствует, принимает совершенно другое, да ещё и stdcall, так что сносит стек. Зато все либы от Mike.dld прекрасно работают. Спасибо за то, что он нормально комментирует свой код, так что любой кто хочет, может в нём разобраться, а некоторые вещи делать и не разобравшись.
    Attachments
    libini.7z (3.9 KiB)
    Downloaded 298 times
  • Nable, спасибо большое.. =)
  • Давно хотел сделать этот код, но это долго было, а сейчас просто не выдержал, до 2х ночи сидел, почти всё время убил на то, чтобы так расставить код, чтобы компилятор с-- сгенерил код без ошибок, ибо он иногда вносит ошибки, когда вставляет выравнивание, но адреса расставляет, как будто ничего не вставил, в результате идёт обращение по адресу, меньшему, чем на самом деле. В итоге плюнул и отключил выравнивания ('?alignword FALSE'). Всё равно их лучше расставлять руками (директива '?align 4' перед критичной функцией или кучкой переменных). Маленькое напутствие - не нужно указывать размер статических массивов - компилятор сам его посчитает. И ставить символ '\0' в конце строк, выделенных двойными кавычками (") - в С это и так означает, что в конце нужно ставить 0.
  • Nable wrote:первый вход в таблице экспортов должен быть точкой входа, которая принимает в eax-ebx-ecx-edx указатели на, соответственно, malloc-free-realloc-DllLoad.
    Опа... это где это сказано? IMHO такие приколы - временная заплатка, вызванная отсутствием нормального механизма импорта/экспорта. Порядок размещения данных в экспорте совершенно произвольный, а экспорт следует осуществлять по именам. Тогда не будет никаких замечаний типа "может грузить любые _стандартные_ библиотеки" - точка входа в не менее стандартных библиотеках console.obj и pixlib.obj называется START, а точка входа в библиотеках libs-dev называется lib_init.
    Ушёл к умным, знающим и культурным людям.
  • Да, ты абсолютно прав, я даже соглашусь с тобой в том, что C-- вреден. Но согласятся ли остальные? Что они скажут, и что с ними делать?

    P.S. Если кому интересно, то функции, которая вызывает точку входа библиотеки, передаётся фактически указатель на таблицу импортов, в которой нужно найти либо lib_init (вызывать, как здесь уже реализовано), либо START (передавать параметр 1=DLL_ENTRY, типа, причина обращения - инициализация), либо, если не найдено, то предполагать, что точки входа нет и выходить из функции.
  • Я тут в предыдущем посте согласился с Diamond'ом, что C-- вреден, и ожидал, что кто-нибудь ещё выскажется. Всем всё равно? С Leency, то понятно, ему нужно лишь показать, как собирать в нормальном компиляторе, и он привыкнет, вроде с MSVC начинал. Но мне казалось, что были люди, хотящие начать с С--. Они что-нибудь скажут? Мне этот компилятор-то долгое время нравился, пока я не нарвался на глюки, после этого стало жалко своё время.
  • я не юзаю hll
    и не специалист
    так что мне дей-
    ствительно всё
    равно)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Когда нужна гибкость ассемблера и не хочется особо париться чтоб написать чтонить маленькое то оч даже не прочь его использовать.. побаловался немного с ним вполне можно даже написать на нем загрузчик для ОС с дискеты, так же спокойно получилось на нем написать код который ищет PCI на компе и контроллер USB. Так что если по мелочи и крупные проекты не писать то вполне приличный компилятор и на мой взгляд довольно простой и гибкий
  • to Veliant
    Да, это факт, и мне нравилось. Но после того, как прокорпел над последним выложеннным примером несколько часов, из которых менее одного - на собственно написание - покоробило.
  • Nable
    а что за глюки??? их можно исправить?
    >...примером несколько часов, из которых менее одного - на собственно написание...
    остальное время боролся с глюками?

    я сам паскалист.... поэтому и тяжело использовать Си.... сам С-- мне очень понравился.... побольше опыта и можно на нем писать мелкие проги.... а потом уже легче будет портировать или переписывать на фасм.... хотя с таким подходом легче сразу писать на фасме...
  • Как ни странно, я сильно поменял свою точку зрения ... С-- не так уж и плох, и это доказывают приложения написанные на нем - я считаю что это лучшее что есть в Колибри :)
  • Who is online

    Users browsing this forum: No registered users and 8 guests