Ответ http://yadi.sk/d/JwGqXZjDC8usoz525 wrote:Есть маленький вопрос по твоей программе - в файле "appearance.c" у тебя стоит вот такая строчка:
scrollbar_v_mouse (#scroll1);
я не понимаю что это - вызов функции илил еще чтото? Если это функция то я не нашел в папке ее декларацию, да и в самом файле тоже ничего не нашел. Тебя не затруднит объяснить что это за строчка?
C--
-
Из хаоса в космос
На SVN этого файла нет. Поэтому вопрос - как например для программы appearance добавляется начальный код?Leency wrote: 2. Новая версия STARTUP.h--, используемый компилятором для генерации начального кода программы.
Он добавляется автоматически при подключении kolibri.h, следует лишь указать в самом начале программы (еще до инклудов) объем выделяемой под приложение памяти в байтах в 16ной системе счисления.z525 wrote:
На SVN этого файла нет. Поэтому вопрос - как например для программы appearance добавляется начальный код?
#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 именами и адресами функций.
Ищем в массиве имя функции, получаем соответствующий ей адрес.
Ищем в массиве имя функции, получаем соответствующий ей адрес.
Сообщаю, что скрипты сборки изменились!
Теперь используется не относительный (../C--/C--.exe), а глобальный путь к папке с С--.exe.
Установить глобальный путь легко:
Путь "D:\Soft\C--" замените на свой путь к папке с С--.
Spoiler:
Установить глобальный путь легко:
Spoiler:
Из хаоса в космос
Пару вопросов по указателям. Если мне необходимо передать функции указатель на какие то данные, хранящиеся например в переменной 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
Если не понятно, приведи конкретную ситуацию где нужно.
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.
Под спойлером функции работы с буфером, написаны вроде правильно
{
$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
Все операции с буфером проходят успешно, но адрес таки не передается
Под спойлером функции работы с буфером, написаны вроде правильно
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
}
Все операции с буфером проходят успешно, но адрес таки не передается
- 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