Dread Knight
Цитата:
Crew
человек же ведь ясно сказал - Delphi, а значит Паскаль
так фига ты ему С суешь? А вообще vasketsov правильно сказал
Действительно, но можно было и поспокойней ответить.
А вот меня раньше очень вопрос донимал, но потом я забыл про него - Можно ли написать dll на С++ с функцией, аналогичной той, что я привел, а потом вызывать ее из Delphi и чтобы она продолжала работать с переменным количеством аргуиментов?
Delphi - Delphi,Описание процедуры
-
vasketsov
Re: Delphi - Delphi,Описание процедуры
Цитата:
В случае __cdecl, как в твоем случае, имхо нереально. Но выход есть: передать первым параметром число последующих и описать функцию как __stdcall.
Несмотря на обилие прочитанной литературы, единственное, что я знаю, что есть вызов Аля Паскаль и Аля Си, которые отличаются друг от друга порядком передачи своих параметров
Если не сложно в двух словах что это за __cdecl и чем __stdcall лучше в данном случае.
А без указания точного количества параметров значит не получится
, а жаль.
В случае __cdecl, как в твоем случае, имхо нереально. Но выход есть: передать первым параметром число последующих и описать функцию как __stdcall.
Несмотря на обилие прочитанной литературы, единственное, что я знаю, что есть вызов Аля Паскаль и Аля Си, которые отличаются друг от друга порядком передачи своих параметров
Если не сложно в двух словах что это за __cdecl и чем __stdcall лучше в данном случае.
А без указания точного количества параметров значит не получится
, а жаль.-
Ork Yason
Re: Delphi - Delphi,Описание процедуры
vasketsov
Crew
я тогда чего-то не догоняю...
получается что делфя не полностью совместима с винАпи?
Crew
я тогда чего-то не догоняю...
получается что делфя не полностью совместима с винАпи?
-
Ork Yason
Re: Delphi - Delphi,Описание процедуры
Crew
Способов передачи параметров много, более того, не все имеют названия.
1) Стек может очищаться как вызывающей функцией (__cdecl), так и вызываемой (_stdcall). Если функция вызывается часто, выгоднее, чтоб она сама очищала стек (почти весь WINAPI такой). Естественно, стек может очищать только та сторона, которая знает о размере переданных параметров.
2) Параметры могут передаваться в стеке в прямом и в обратном порядке.
3) Переметры могут передаваться не только через стек, но и через регистры (один и более, часто EAX или EAX/EDX). Сюда относится __fastcall и обычные паскалевские функции с небольшим числом стандартных аргументов.
4) Есть еще очень интересный способ передачи параметров, используемый при переходе в NT-системах в режим ядра. Все параметры передаются через один регистр, а именно, в него кладется указатель на первый параметр __stdcall-овской функции. Но без знания языка ассемблера такое самому руками, естественно, не написать, по крайней мере, мне не известен компилятор, понимающий такую модель вызова.
На самом деле Delphi Compiler знает много методов вызовов, так что попробую про них почитать во встроенной справке.
Ork Yason
Цитата:
получается что делфя не полностью совместима с винАпи?
Нифига подобного.
Способов передачи параметров много, более того, не все имеют названия.
1) Стек может очищаться как вызывающей функцией (__cdecl), так и вызываемой (_stdcall). Если функция вызывается часто, выгоднее, чтоб она сама очищала стек (почти весь WINAPI такой). Естественно, стек может очищать только та сторона, которая знает о размере переданных параметров.
2) Параметры могут передаваться в стеке в прямом и в обратном порядке.
3) Переметры могут передаваться не только через стек, но и через регистры (один и более, часто EAX или EAX/EDX). Сюда относится __fastcall и обычные паскалевские функции с небольшим числом стандартных аргументов.
4) Есть еще очень интересный способ передачи параметров, используемый при переходе в NT-системах в режим ядра. Все параметры передаются через один регистр, а именно, в него кладется указатель на первый параметр __stdcall-овской функции. Но без знания языка ассемблера такое самому руками, естественно, не написать, по крайней мере, мне не известен компилятор, понимающий такую модель вызова.
На самом деле Delphi Compiler знает много методов вызовов, так что попробую про них почитать во встроенной справке.
Ork Yason
Цитата:
получается что делфя не полностью совместима с винАпи?
Нифига подобного.
-
RIKO