C--

High-level languages programming questions
  • Leency wrote: 2. Новая версия STARTUP.h--, используемый компилятором для генерации начального кода программы.
    На SVN этого файла нет. Поэтому вопрос - как например для программы appearance добавляется начальный код?
  • z525 wrote:
    На SVN этого файла нет. Поэтому вопрос - как например для программы appearance добавляется начальный код?
    Он добавляется автоматически при подключении kolibri.h, следует лишь указать в самом начале программы (еще до инклудов) объем выделяемой под приложение памяти в байтах в 16ной системе счисления.

    #define MEMSIZE 0xFE800
    to infinity and beyond
  • punk_joker wrote:Он добавляется автоматически при подключении kolibri.h,
    Благодарю. Вобщето я стормозил - видно ведь не вооруженным глазом.

    Появился еще вопрос:
    В файле appearance.c вызывается функция scrollbar_v_mouse (#scroll1);
    Я подозреваю что эта функция из box_lib.obj и скорее всего это указатель на нее, но я никак не пойму как этот указатель получает правельный адрес этой функции?
    В файле box_lib.h есть такие строчки:

    char aScrollbar_v_mouse[18] = "scrollbar_v_mouse\0";
    dword scrollbar_v_mouse = #aScrollbar_v_mouse;

    т.е. здесь указатель scrollbar_v_mouse получает адрес массива aScrollbar_v_mouse, а откуда тогда берется адрес функции scrollbar_v_mouse из box_lib.obj (если она там так завется)?
    В си-шных примерах еще можно проследить момент когда адрес из box_lib.h передается указателю, здесь я этого не могу отследить.

    На всякий случай - все это лежит здесь здесь
    и здесь
    Last edited by z525 on Tue Nov 26, 2013 12:55 am, edited 1 time in total.
  • функция 68.19 (загрузка dll) выдает массив dword c именами и адресами функций.
    Ищем в массиве имя функции, получаем соответствующий ей адрес.
  • Сообщаю, что скрипты сборки изменились!
    Spoiler:
    Screenshot_1.png
    Screenshot_1.png (35.17 KiB)
    Viewed 5610 times
    Теперь используется не относительный (../C--/C--.exe), а глобальный путь к папке с С--.exe.
    Установить глобальный путь легко:
    Spoiler:
    Screenshot_4.png
    Screenshot_4.png (264.82 KiB)
    Viewed 5610 times
    Путь "D:\Soft\C--" замените на свой путь к папке с С--.
    Из хаоса в космос
  • Пару вопросов по указателям. Если мне необходимо передать функции указатель на какие то данные, хранящиеся например в переменной data, мне следует передавать аргумент как #data? и еще то что я до сих пор вообще никак не понимаю, если функция возвращает указатель на данные, как мне до них добраться?
    to infinity and beyond
  • С первым вопросом всё понятно, понял я правильно. А вот со вторым всё еще неясно
    to infinity and beyond
  • 1.
    char data[100];
    dword pointer;
    pointer = #data;

    2.
    Если функция возвращает указатель на данные, то нужно работать с этим указателем.
    gebugch(ESBYTE[pointer]); //вывести на дебаг первый символ по адресу из указателя; аналогично gebugch(data[0]);
    gebugch(ESBYTE[pointer+1]); //второй, аналогично gebugch(data[1]);
    gebugch(ESBYTE[pointer+10]); //одинадцатый
    debug(pointer); //вывести всё содержимое указателя до конечного \0 на дебаг
    strcpy(#data, pointer); //копирует всё содержимое из указателя в #data

    Если не понятно, приведи конкретную ситуацию где нужно.
    Из хаоса в космос
  • И все таки сам я не могу разобраться. В общем разбираюсь с работой с буфером обмена, и хочу сделать передачу пути копируемого файла через буфер обмена, чтоб была возможность копирования файлов между разными окнами Eolite.
    Под спойлером функции работы с буфером, написаны вроде правильно
    Spoiler:inline fastcall dword NumberSlot()
    {
    $mov eax, 54
    $mov ebx, 0
    $int 0x40
    }

    inline fastcall dword GetSlot( ECX)
    {
    $mov eax, 54
    $mov ebx, 1
    $int 0x40
    }

    inline fastcall dword SetSlot( EDX, ESI)
    {
    $mov eax, 54
    $mov ebx, 2
    $int 0x40
    }
    В атаче файл copy.h
    Все операции с буфером проходят успешно, но адрес таки не передается
    Attachments
    copy.7z (824 Bytes)
    Downloaded 216 times
    to infinity and beyond
  • > inline fastcall dword SetSlot( EDX, ESI)

    Ошибка:

    Code: Select all

    ======================================================================
    ====================== Функция 54, подфункция 2 ======================
    ================== Записать данные в буфер обмена. ===================
    ======================================================================
    Параметры:
      * eax = 54 - номер функции
      * ebx = 2 - номер подфункции
      * eсx = количество копируемых байт
      * edx = указатель на буфер под копируемые данные
    Возвращаемое значение:
      * eax = 0 - успешно
      * eax = 1 - ошибка
      * eax = -1 - отсутствует область главного списка
    
    Из хаоса в космос
  • Спасибо. Этож надо было на такой ерунде облажаться.
    to infinity and beyond
  • Бывает.
    ===

    Сам только что насилу разобрался. Сейчас скину код.
    Из хаоса в космос
  • Вот реализация. Пожалуйста, используй и развивать этот подход, т.к. нужно переходить на ООП.

    Какой там формат данных и как его использовать я так до конца не понял. Но то, что есть работает.
    Attachments
    clipboard.7z (4.07 KiB)
    Downloaded 215 times
    Из хаоса в космос
  • Leency wrote:Вот реализация. Пожалуйста, используй и развивать этот подход, т.к. нужно переходить на ООП.

    Какой там формат данных и как его использовать я так до конца не понял. Но то, что есть работает.
    Без проблем, будем развиваться. Это фактически мой первый практический опыт работы над чем-то серьезным. Спасибо за реализацию. В эту ночь пару фич да реализую.
    to infinity and beyond
  • Who is online

    Users browsing this forum: No registered users and 21 guests