Page 3 of 15

Re: C--

Posted: Thu Jan 08, 2009 11:51 pm
by s1n
такс... =)... вот я и решил сюда чтонить написать... но постарался по делу..

в общем.. прикрепил мелкий аривчик.. с двумя примерами для использования libini.obj...
первый написанный на fasm'е... рабочий..
второй на c--... как не странно - не рабочий...
накидал основу... чувствую что ошибся в какойто мелочи.. но не могу понять, где и как можно исправить... может кому не лень - посмотрит... вдруг поймет.. и выложит... как минимум 4 человека буду рады...
в readme.txt оставил мелкие заметки...

Re: C--

Posted: Fri Jan 09, 2009 9:27 pm
by Nable
Так уж и быть-в данный момент ковыряюсь в этом примере, убираю ошибки. Ух, Leency, вечно ты меня заставляешь ставить новые рекорды по распределению своего времени. Напомню, именно Leency втянул меня в использование ЯВУ в Колибри, особенно, в связи с совместными программами.

Re: C--

Posted: Fri Jan 09, 2009 9:51 pm
by Veliant
Если делать по аналогии с 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";

Re: C--

Posted: Fri Jan 09, 2009 10:49 pm
by s1n
Veliant, у тебя работает?
я собираю... у меня не работает.. =(...

Re: C--

Posted: Sat Jan 10, 2009 7:06 pm
by Nable
Вчера сделал - пример загружает libini, более того, может грузить любые _стандартные_ библиотеки. box_lib не загрузит, т.к. эта либа не имеет точки входа как таковой, а первый вход в таблице экспортов должен быть точкой входа, которая принимает в eax-ebx-ecx-edx указатели на, соответственно, malloc-free-realloc-DllLoad.
console.obj тоже не работает, т.к. его точка входа этому не соответствует, принимает совершенно другое, да ещё и stdcall, так что сносит стек. Зато все либы от Mike.dld прекрасно работают. Спасибо за то, что он нормально комментирует свой код, так что любой кто хочет, может в нём разобраться, а некоторые вещи делать и не разобравшись.

Re: C--

Posted: Sat Jan 10, 2009 7:17 pm
by s1n
Nable, спасибо большое.. =)

Re: C--

Posted: Sat Jan 10, 2009 10:16 pm
by Nable
Давно хотел сделать этот код, но это долго было, а сейчас просто не выдержал, до 2х ночи сидел, почти всё время убил на то, чтобы так расставить код, чтобы компилятор с-- сгенерил код без ошибок, ибо он иногда вносит ошибки, когда вставляет выравнивание, но адреса расставляет, как будто ничего не вставил, в результате идёт обращение по адресу, меньшему, чем на самом деле. В итоге плюнул и отключил выравнивания ('?alignword FALSE'). Всё равно их лучше расставлять руками (директива '?align 4' перед критичной функцией или кучкой переменных). Маленькое напутствие - не нужно указывать размер статических массивов - компилятор сам его посчитает. И ставить символ '\0' в конце строк, выделенных двойными кавычками (") - в С это и так означает, что в конце нужно ставить 0.

Re: C--

Posted: Sun Jan 11, 2009 1:31 pm
by diamond
Nable wrote:первый вход в таблице экспортов должен быть точкой входа, которая принимает в eax-ebx-ecx-edx указатели на, соответственно, malloc-free-realloc-DllLoad.
Опа... это где это сказано? IMHO такие приколы - временная заплатка, вызванная отсутствием нормального механизма импорта/экспорта. Порядок размещения данных в экспорте совершенно произвольный, а экспорт следует осуществлять по именам. Тогда не будет никаких замечаний типа "может грузить любые _стандартные_ библиотеки" - точка входа в не менее стандартных библиотеках console.obj и pixlib.obj называется START, а точка входа в библиотеках libs-dev называется lib_init.

Re: C--

Posted: Tue Jan 13, 2009 8:04 pm
by Nable
Да, ты абсолютно прав, я даже соглашусь с тобой в том, что C-- вреден. Но согласятся ли остальные? Что они скажут, и что с ними делать?

P.S. Если кому интересно, то функции, которая вызывает точку входа библиотеки, передаётся фактически указатель на таблицу импортов, в которой нужно найти либо lib_init (вызывать, как здесь уже реализовано), либо START (передавать параметр 1=DLL_ENTRY, типа, причина обращения - инициализация), либо, если не найдено, то предполагать, что точки входа нет и выходить из функции.

Re: C--

Posted: Fri Jan 16, 2009 9:30 pm
by Nable
Я тут в предыдущем посте согласился с Diamond'ом, что C-- вреден, и ожидал, что кто-нибудь ещё выскажется. Всем всё равно? С Leency, то понятно, ему нужно лишь показать, как собирать в нормальном компиляторе, и он привыкнет, вроде с MSVC начинал. Но мне казалось, что были люди, хотящие начать с С--. Они что-нибудь скажут? Мне этот компилятор-то долгое время нравился, пока я не нарвался на глюки, после этого стало жалко своё время.

Re: C--

Posted: Fri Jan 16, 2009 10:02 pm
by Gluk
я не юзаю hll
и не специалист
так что мне дей-
ствительно всё
равно)

Re: C--

Posted: Fri Jan 16, 2009 10:02 pm
by Veliant
Когда нужна гибкость ассемблера и не хочется особо париться чтоб написать чтонить маленькое то оч даже не прочь его использовать.. побаловался немного с ним вполне можно даже написать на нем загрузчик для ОС с дискеты, так же спокойно получилось на нем написать код который ищет PCI на компе и контроллер USB. Так что если по мелочи и крупные проекты не писать то вполне приличный компилятор и на мой взгляд довольно простой и гибкий

Re: C--

Posted: Fri Jan 16, 2009 10:26 pm
by Nable
to Veliant
Да, это факт, и мне нравилось. Но после того, как прокорпел над последним выложеннным примером несколько часов, из которых менее одного - на собственно написание - покоробило.

Re: C--

Posted: Fri Jan 16, 2009 11:25 pm
by s1n
Nable
а что за глюки??? их можно исправить?
>...примером несколько часов, из которых менее одного - на собственно написание...
остальное время боролся с глюками?

я сам паскалист.... поэтому и тяжело использовать Си.... сам С-- мне очень понравился.... побольше опыта и можно на нем писать мелкие проги.... а потом уже легче будет портировать или переписывать на фасм.... хотя с таким подходом легче сразу писать на фасме...

Re: C--

Posted: Sun Jan 18, 2009 9:46 am
by maximYCH
Как ни странно, я сильно поменял свою точку зрения ... С-- не так уж и плох, и это доказывают приложения написанные на нем - я считаю что это лучшее что есть в Колибри :)