Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Apr 23, 2019 10:01 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 217 posts ]  Go to page Previous 110 11 12 13 14 15 Next
Author Message
 Post subject: Re: C--
PostPosted: Wed May 14, 2014 10:21 pm 
Offline
User avatar

Joined: Tue Feb 02, 2010 12:37 pm
Posts: 64
Приветствую, почему-то не получется из С-- обратиться к SysFn68.22, не подскажете где ошибаюсь?

char *buff_name="SHELLY";
result=createMemoryBuffer(buff_name, 1024*16, SHM_OPEN_ALWAYS);
closeMemoryBuffer(buff_name);

int createMemoryBuffer(dword name, int size, dword flags) {
$mov eax,68;
$mov ebx,22;
ECX=name;
EDX=size;
ESI=flags;
$int 0x40
return EDX;
}
void closeMemoryBuffer(dword ECX) {
$mov eax,68;
$mov ebx,23;
$int 0x40
}

Долго боролся получая ошибку 33(Неправильные параметры), теперь имею 30(Не хватает памяти, что сомнительно тк её 4гб).

_________________
*.*


Top
   
 Post subject: Re: C--
PostPosted: Wed May 14, 2014 10:42 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
68.11 ?

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
 Post subject: Re: C--
PostPosted: Wed May 14, 2014 11:11 pm 
Offline
User avatar

Joined: Tue Feb 02, 2010 12:37 pm
Posts: 64
Mario_r4 wrote:
68.11 ?

Разьве они связаны? В описании прописаны 12 и 13 только как связанные...

_________________
*.*


Top
   
 Post subject: Re: C--
PostPosted: Wed May 14, 2014 11:35 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Alexus wrote:
Разьве они связаны? В описании прописаны 12 и 13 только как связанные...
http://websvn.kolibrios.org/filedetails ... #line-3019
Quote:
Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
http://websvn.kolibrios.org/filedetails ... #line-3003
Quote:
Remarks:
* Before this call one must initialize process heap by call to
subfunction 11.


Top
   
 Post subject: Re: C--
PostPosted: Wed May 14, 2014 11:53 pm 
Offline
User avatar

Joined: Tue Feb 02, 2010 12:37 pm
Posts: 64
Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.

_________________
*.*


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 12:17 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1143
Alexus wrote:
Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.

Где надо поправить? Да и обертки для функций работы с память для С-- давно уж как написаны http://websvn.kolibrios.org/filedetails ... ib%2Fmem.h

_________________
я лишь учусь


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 9:41 am 
Offline
User avatar

Joined: Tue Feb 02, 2010 12:37 pm
Posts: 64
В wiki которая первая выходит в гугле по запросу kolibrios api:
http://wiki.kolibrios.org/wiki/SysFn68/ ... 1.81.D0.B0.

Эти обертки я видел, для 22 и 23 подфункции там нет.

P.S. Нашел "You can find the latest API documentation in /kernel/docs/ in the SVN repository (WebSVN)" , извиняюсь. Но оберток все равно нет для 22 и 23 =).

_________________
*.*


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 1:24 pm 
Offline
User avatar

Joined: Tue Feb 02, 2010 12:37 pm
Posts: 64
Есть ли где-нибудь примеры использования именованной области на С--? Вроде все правильно сделано и EDX=0(ошибки нет), но при этом EAX вместо адреса именованной области отдает 0, что значит ошибку =\

_________________
*.*


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 2:05 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Alexus, ты бы лучше привёл конкретный код.
Пока что, если исходить из кода, приведённого несколькими постами выше:
Alexus wrote:
return EDX;
скорее всего будет преобразовано в
Code:
mov eax, edx

Quote:
при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
edx = 0 - успех, иначе - код ошибки

Ну вот и получается: успех -> edx=0 -> mov eax, edx -> eax=0


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 5:04 pm 
Offline
User avatar

Joined: Tue Feb 02, 2010 12:37 pm
Posts: 64
Код: http://pastebin.com/PJjdgPEc , извиняюсь за бардак.

В EAX всегда идет 0, или я чего-то не понимаю или я запутался в указателях =\. Вероятнее всего второе..

_________________
*.*


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 5:31 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Code:
        error=EDX;
; .......................
        return error;

Code:
mov [error], edx
; .......................
mov eax, [error]


Если область создана успешно, то edx=0.
Если edx=0, то после error=EDX в error тоже будет 0.
Если error=0, то после return error в eax тоже будет 0.


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 5:53 pm 
Offline
User avatar

Joined: Tue Feb 02, 2010 12:37 pm
Posts: 64
Да, но если область создана то до return её адрес будет в eax,
откуда он записывается в buff,
если ошибки нет error=0, то адрес на который указывает buffer меняется на содержащийся в buff.

Но в итоге при error=0, я имею адрес буфера=0

_________________
*.*


Top
   
 Post subject: Re: C--
PostPosted: Thu May 15, 2014 7:43 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Может быть, на самом деле, error<>0?

Code:
ECX=*name;
превращается в
Code:
8B4D14                   mov     ecx,[ebp+14h]
0FBE09                   movsx   ecx,[ecx]
последняя команда знаково расширяет байт(0FBE09) по адресу в ecx

в int2str:
Code:
return str;
превращается в
Code:
0FBE8500FFFFFF           movsx   eax,[ebp-100h]
даже если бы возвращался адрес, возвращать адрес на стеке — плохая идея

ну и дальше пошло-поехало :)


Top
   
 Post subject: Re: C--
PostPosted: Sun Dec 13, 2015 4:36 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4983
Базовая поддержка коллекций строк (lib/collections.h)
Коллекции похожи на массивы. Работает все до безобразия просто.

Code:
void main()
{   
   collection s;
   s.init(4096);
   s.add("lorem");
   s.add("ipsum");
   s.add("1234566");
   debugln(s.get(0)); //-> "lorem"
   debugln(s.get(1)); //-> "ipsum"
   debugln(s.get(2)); //-> "123456"
}


Ограничения: максимум 4096 элементов, нужно знать размер буфера заранее.

Пример есть в папке CMM/examples/collections.c

_________________
Через тернии к звездам


Top
   
 Post subject: Re: C--
PostPosted: Thu Jan 07, 2016 7:04 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4983
+ lib/menu.h
+ examples/menu.c

Стандартный компонент меню и пример использования.


Attachments:
menu.gif
menu.gif [ 188.09 KiB | Viewed 3492 times ]

_________________
Через тернии к звездам
Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 217 posts ]  Go to page Previous 110 11 12 13 14 15 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited