Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Nov 14, 2019 10:01 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 391 posts ]  Go to page Previous 112 13 14 15 1627 Next
Author Message
 Post subject: Re: Вопрос
PostPosted: Tue Dec 15, 2015 8:27 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
[quote="Pathoswithin"]загрузку .dll (PE) делает CleverMouse (только кажется, мне всё-таки придётся ей помочь).[/quote]
Ну так помоги! Ведь это будет круто, когда такое возможно будет, правда !? :-)
Отпишите когда сделаете такое, хорошо ?


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Dec 15, 2015 8:37 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Виндовые библиотеки всё равно можно будет запускать только если написать для КОС все библиотеки, ими используемые (то-есть windows api). У меня была идея помочь ей ещё летом, но потом решил не метаться из стороны в сторону, и сначала доделать запись в ntfs.


Top
   
 Post subject: Re: Вопрос
PostPosted: Tue Dec 15, 2015 9:13 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
[quote="Pathoswithin"]Виндовые библиотеки всё равно можно будет запускать только если написать для КОС все библиотеки, ими используемые (то-есть windows api)[/quote]
Ну я это понимаю! Но насколько я понимаю, если в виндовой длл не будут использованы функции windows api АБСОЛЮТНО, ведь она по идее запустится ?
Т.е. буду использовать исключительно конструкции Дельфи и её самые простые стандартные переменные и т.д..... ну ведь должна же работать я та понимаю ?


Top
   
 Post subject: Re: Вопрос
PostPosted: Wed Dec 16, 2015 9:45 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Вопрос может странноватый, но я просто никогда такого не делал ...
Вот какие есть соглашения по передачи данных через процедуры (DLL) в Дельфи
register, pascal, cdecl, stdcall, safecall
Допустим есть процедуры "P1","P2".....
Хочу для каждой из процедур сделать абсолютно любой способ вызова, как говорится на все случаи жизни(!), соответственно изменим имя, на P1_register , P1_pascal, P1_cdecl..... и т.д.
Основной вопрос: ДОПУСКАЕТСЯ ЛИ ТАКОЕ В DLL ?
ЛЮБАЯ СРЕДА (ПРОГРАММА) КОТОРАЯ МОЖЕТ ИСПОЛЬЗОВАТЬ DLL-МОДУЛИ БУДЕТ "СЧИТАТЬ" DLL КОРРЕКТНЫМ ?
(я просто при экспорте использовал всегда одно соглашения, - cdecl, уже не помню почему именно cdecl. В одном DLL с разными соглашениями не делал и не сталкивался)


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Dec 17, 2015 1:47 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Можно, только зачем? Придётся создать несколько оболочек для каждой процедуры.


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Dec 17, 2015 9:12 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
[quote="Pathoswithin"]Можно, только зачем?[/quote]
Работаю над KOS.dll. Похоже, что надо такое сделать раз и навсегда, на случай использования KOS.dll в разных средах программирования, каждая из которых с разными "заморочками" связанными с приёмом-передачей данных для dll.

[quote="Pathoswithin"]Придётся создать несколько оболочек для каждой процедуры.[/quote]
Это не проблема.
procedure dfSetEAX(c:Cardinal); begin eax_:=c; end; exports dfSetEAX;
procedure rgSetEAX(c:Cardinal); register; begin eax_:=c; end; exports rgSetEAX;
procedure psSetEAX(c:Cardinal); pascal; begin eax_:=c; end; exports psSetEAX;
procedure cdSetEAX(c:Cardinal); cdecl; begin eax_:=c; end; exports cdSetEAX;
procedure stSetEAX(c:Cardinal); stdcall; begin eax_:=c; end; exports stSetEAX;
procedure sfSetEAX(c:Cardinal); safecall; begin eax_:=c; end; exports sfSetEAX;

=============
Можно ли создать тему посвященную KOS.dll ? Если да, то где её можно создать?
KOS.dll постоянно буду дорабатывать и совершенствовать, но пока результаты не велики :-(
Пока попытки использовать в CB6 не увенчались успехом. :-( Думаю, что и в VS6 тоже самое, хотя еще толком не пробовал. В FASM вроде что-то получается её прикрутить и использовать.
Тему хочу создать, для вопросов, возможной поддержки, а также для тех, (в частности новичков), которых может однажды заинтересовать использование KOS.dll , для проб и экспериментов с функциями КОС. Хочу довести её до такого уровня, чтобы при помощи её можно было бы написать игру подобную "Косилка", думаю, такое вполне реально и вполне, может быть, мной реализовано. Заканчиваю работы по функции 2, скоро будет возможным пример, с использованием клавиатуры, пример типа, - передвигания "кубика" стрелками и т.д. :-) Ожидаю утверждения названий процедур :-), чтобы знать как и на что "опираться" или какие делать аналоги процедур, т.е. с какими именами "подточенными" под KOS.dll


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Dec 17, 2015 12:01 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Зачем изобретать велосипед? Делаешь все функции в одной нотации на выбор cdecl/stdcall/fastcall(?) и в документации об этом описываешь. Все остальные языки умеют работать с ними, особенно с первыми двумя


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Dec 17, 2015 12:10 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
[quote="Veliant"]Зачем изобретать велосипед? Делаешь все функции в одной нотации на выбор cdecl/stdcall/fastcall(?) и в документации об этом описываешь. Все остальные языки умеют работать с ними, особенно с первыми двумя[/quote]
Да пусть будут все! На всякий случай, чтобы никогда не возникало никаких вопросов ни с чем!


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Dec 17, 2015 6:04 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Veliant, вот в фасме испытываю ддл-модуль...
как показала практика для передачи в процедуру нужно использовать safecall; (ну возможно и другие, кроме register; по-моему так)
а вот для приёма из функции register; вот и ответ на вопрос "зачем?"

macro SetEAX a { invoke sfSetEAX,eax }
macro GetEAX { invoke rgGetEAX }

Пока так работает другое не испытывал, не вижу необходимости!


Top
   
 Post subject:
PostPosted: Thu Dec 17, 2015 7:22 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Прежде чем городить, советую почитать про конвенции вызова и как они влияют на возвращаемое(!) значение. Если кратко - никак. Разница только в том как передаются параметры функции


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Dec 17, 2015 8:32 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Veliant wrote:
Прежде чем городить, советую почитать про конвенции вызова и как они влияют на возвращаемое(!) значение. Если кратко - никак. Разница только в том как передаются параметры функции

По началу как получается так и пишу! :-) Главное, чтобы вообще работало! :-) Я выложу архив с модулем, шаблонами и демкой, если захочешь скачаешь рассмотришь. Может действительно можно как-то по другому, более эффективно, я не спорю.


Top
   
 Post subject: Re: Вопрос
PostPosted: Thu Dec 17, 2015 10:42 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Veliant и другие тоже....
Создана тема “МЭФК ( KOS.dll )» посвященная моему модулю, где он выложен с примером использования.
Это вот здесь: viewtopic.php?f=39&t=3205&p=63460#p63460


Top
   
 Post subject: Re: Вопрос
PostPosted: Fri Dec 18, 2015 7:46 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
ALEXS1983 wrote:
Да пусть будут все! На всякий случай, чтобы никогда не возникало никаких вопросов ни с чем!
Всё равно не получится. Например, fastcall у Microsoft и fastcall - оно же register - у Borland - две разные вещи. Например, конвенция вызова, используемая по умолчанию, разная в разных языках и иногда зависит от опций компилятора. Так что перестань страдать фигнёй и используй stdcall. Все функции WinAPI с фиксированным числом аргументов - stdcall, так что любая среда, способная вызывать WinAPI, способна работать с stdcall.

ALEXS1983 wrote:
Veliant, вот в фасме испытываю ддл-модуль...
как показала практика для передачи в процедуру нужно использовать safecall; (ну возможно и другие, кроме register; по-моему так)
а вот для приёма из функции register; вот и ответ на вопрос "зачем?"

macro SetEAX a { invoke sfSetEAX,eax }
macro GetEAX { invoke rgGetEAX }

Пока так работает другое не испытывал, не вижу необходимости!
invoke подразумевает конвенцию stdcall. Для cdecl есть cinvoke. safecall - вообще Borland'овская эзотерика, которая в основном ведёт себя как stdcall, но может совершенно неожиданно перестать, так что её вообще между языками использовать не стоит.

P.S. Ты специально ставишь флажок "Отключить в этом сообщении BBCode" при создании сообщения или это какие-то особенности настроек форума?

_________________
Сделаем мир лучше!


Top
   
 Post subject: Re: Вопрос
PostPosted: Fri Dec 18, 2015 8:31 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
ALEXS1983 wrote:
Pathoswithin wrote:
Виндовые библиотеки всё равно можно будет запускать только если написать для КОС все библиотеки, ими используемые (то-есть windows api)

Ну я это понимаю! Но насколько я понимаю, если в виндовой длл не будут использованы функции windows api АБСОЛЮТНО, ведь она по идее запустится ?
Т.е. буду использовать исключительно конструкции Дельфи и её самые простые стандартные переменные и т.д..... ну ведь должна же работать я та понимаю ?

А что, дельфи уже перестала добавлять неявную ссылку на модуль System?
Вообще, зависимости от WinAPI легко проверить экспериментально - в мире утилит MS есть dumpbin /imports <exe|dll>, в гнутом мире objdump --all-headers <exe|dll>, у Borland вроде что-то похожее называлось tdump.

_________________
Сделаем мир лучше!


Top
   
 Post subject: Re: Вопрос
PostPosted: Fri Dec 18, 2015 8:33 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
CleverMouse
У меня в оффтопе вообще всё отключено, хотя ссылки иногда работают.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 391 posts ]  Go to page Previous 112 13 14 15 1627 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


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:  
cron
Powered by phpBB® Forum Software © phpBB Limited