Delphi - Delphi,Описание процедуры

Аватара пользователя
Crew

Re: Delphi - Delphi,Описание процедуры

Сообщение Crew »

Dread Knight


Цитата:



Crew

человек же ведь ясно сказал - Delphi, а значит Паскаль

так фига ты ему С суешь? А вообще vasketsov правильно сказал



Действительно, но можно было и поспокойней ответить.



А вот меня раньше очень вопрос донимал, но потом я забыл про него -  Можно ли написать dll на С++ с функцией, аналогичной той, что я привел, а потом вызывать ее из Delphi и чтобы она продолжала работать с переменным количеством аргуиментов?
Аватара пользователя
vasketsov

Re: Delphi - Delphi,Описание процедуры

Сообщение vasketsov »

Цитата:



В случае __cdecl, как в твоем случае, имхо нереально. Но выход есть: передать первым параметром число последующих и описать функцию как __stdcall.



Несмотря на обилие прочитанной литературы, единственное, что я знаю, что есть вызов Аля Паскаль и Аля Си, которые отличаются друг от друга порядком передачи своих параметров

Если не сложно в двух словах что это за __cdecl и чем __stdcall лучше в данном случае.





А без указания точного количества параметров значит не получится Изображение, а жаль.
Аватара пользователя
Ork Yason

Re: Delphi - Delphi,Описание процедуры

Сообщение Ork Yason »

vasketsov

Crew

я тогда чего-то не догоняю...

получается что делфя не полностью совместима с винАпи?
Аватара пользователя
Ork Yason

Re: Delphi - Delphi,Описание процедуры

Сообщение Ork Yason »

Crew

Способов передачи параметров много, более того, не все имеют названия.



1) Стек может очищаться как вызывающей функцией (__cdecl), так и вызываемой (_stdcall). Если функция вызывается часто, выгоднее, чтоб она сама очищала стек (почти весь WINAPI такой). Естественно, стек может очищать только та сторона, которая знает о размере переданных параметров.



2) Параметры могут передаваться в стеке в прямом и в обратном порядке.



3) Переметры могут передаваться не только через стек, но и через регистры (один и более, часто EAX или EAX/EDX). Сюда относится __fastcall и обычные паскалевские функции с небольшим числом стандартных аргументов.



4) Есть еще очень интересный способ передачи параметров, используемый при переходе в NT-системах в режим ядра. Все параметры передаются через один регистр, а именно, в него кладется указатель на первый параметр __stdcall-овской функции. Но без знания языка ассемблера такое самому руками, естественно, не написать, по крайней мере, мне не известен компилятор, понимающий такую модель вызова.



На самом деле Delphi Compiler знает много методов вызовов, так что попробую про них почитать во встроенной справке.



Ork Yason


Цитата:



получается что делфя не полностью совместима с винАпи?



Нифига подобного.
Аватара пользователя
RIKO

Re: Delphi - Delphi,Описание процедуры

Сообщение RIKO »

А ни как если не использовать

встроенный ASM.
Ответить

Вернуться в «Программирование и базы данных»