Page 9 of 15
Re: C--
Posted: Mon Nov 04, 2013 11:10 pm
by Leency
z525 wrote:Есть маленький вопрос по твоей программе - в файле "appearance.c" у тебя стоит вот такая строчка:
scrollbar_v_mouse (#scroll1);
я не понимаю что это - вызов функции илил еще чтото? Если это функция то я не нашел в папке ее декларацию, да и в самом файле тоже ничего не нашел. Тебя не затруднит объяснить что это за строчка?
Ответ
http://yadi.sk/d/JwGqXZjDC8uso
Re: C--
Posted: Sun Nov 17, 2013 5:05 pm
by z525
Leency wrote:
2. Новая версия STARTUP.h--, используемый компилятором для генерации начального кода программы.
На SVN этого файла нет. Поэтому вопрос - как например для программы
appearance добавляется начальный код?
Re: C--
Posted: Mon Nov 18, 2013 1:43 am
by punk_joker
z525 wrote:
На SVN этого файла нет. Поэтому вопрос - как например для программы appearance добавляется начальный код?
Он добавляется автоматически при подключении kolibri.h, следует лишь указать в самом начале программы (еще до инклудов) объем выделяемой под приложение памяти в байтах в 16ной системе счисления.
#define MEMSIZE 0xFE800
Re: C--
Posted: Tue Nov 26, 2013 12:49 am
by z525
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 передается указателю, здесь я этого не могу отследить.
На всякий случай - все это лежит здесь
здесь
и здесь
Re: C--
Posted: Tue Nov 26, 2013 2:59 am
by lev
функция 68.19 (загрузка dll) выдает массив dword c именами и адресами функций.
Ищем в массиве имя функции, получаем соответствующий ей адрес.
Re: C--
Posted: Fri Dec 27, 2013 2:47 am
by Leency
Сообщаю, что скрипты сборки изменились!
Spoiler:

-
Screenshot_1.png (35.17 KiB)
Viewed 5970 times
Теперь используется не относительный (../C--/C--.exe), а глобальный путь к папке с С--.exe.
Установить глобальный путь легко:
Spoiler:

-
Screenshot_4.png (264.82 KiB)
Viewed 5970 times
Путь "D:\Soft\C--" замените на свой путь к папке с С--.
Re: C--
Posted: Sat Jan 04, 2014 4:11 am
by punk_joker
Пару вопросов по указателям. Если мне необходимо передать функции указатель на какие то данные, хранящиеся например в переменной data, мне следует передавать аргумент как #data? и еще то что я до сих пор вообще никак не понимаю, если функция возвращает указатель на данные, как мне до них добраться?
Posted: Sat Jan 04, 2014 5:55 am
by punk_joker
С первым вопросом всё понятно, понял я правильно. А вот со вторым всё еще неясно
Re: C--
Posted: Sat Jan 04, 2014 12:54 pm
by Leency
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
Если не понятно, приведи конкретную ситуацию где нужно.
Re: C--
Posted: Sat Jan 04, 2014 11:21 pm
by punk_joker
И все таки сам я не могу разобраться. В общем разбираюсь с работой с буфером обмена, и хочу сделать передачу пути копируемого файла через буфер обмена, чтоб была возможность копирования файлов между разными окнами 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
Все операции с буфером проходят успешно, но адрес таки не передается
Re: C--
Posted: Mon Jan 06, 2014 12:39 am
by Leency
> inline fastcall dword SetSlot( EDX, ESI)
Ошибка:
Code: Select all
======================================================================
====================== Функция 54, подфункция 2 ======================
================== Записать данные в буфер обмена. ===================
======================================================================
Параметры:
* eax = 54 - номер функции
* ebx = 2 - номер подфункции
* eсx = количество копируемых байт
* edx = указатель на буфер под копируемые данные
Возвращаемое значение:
* eax = 0 - успешно
* eax = 1 - ошибка
* eax = -1 - отсутствует область главного списка
Re: C--
Posted: Mon Jan 06, 2014 12:59 am
by punk_joker
Спасибо. Этож надо было на такой ерунде облажаться.
Re: C--
Posted: Mon Jan 06, 2014 1:50 am
by Leency
Бывает.
===
Сам только что насилу разобрался. Сейчас скину код.
Re: C--
Posted: Mon Jan 06, 2014 2:12 am
by Leency
Вот реализация. Пожалуйста, используй и развивать этот подход, т.к. нужно переходить на ООП.
Какой там формат данных и как его использовать я так до конца не понял. Но то, что есть работает.
Re: C--
Posted: Mon Jan 06, 2014 2:18 am
by punk_joker
Leency wrote:Вот реализация. Пожалуйста, используй и развивать этот подход, т.к. нужно переходить на ООП.
Какой там формат данных и как его использовать я так до конца не понял. Но то, что есть работает.
Без проблем, будем развиваться. Это фактически мой первый практический опыт работы над чем-то серьезным. Спасибо за реализацию. В эту ночь пару фич да реализую.