![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процедуры и функции [D7, XP]
Steep © (2006-12-19 16:12:00)Как я понял использование (изменение) параметров компонента в сабже запрещена.
Как этого можно избежать обойти?
Anatoly Podgoretsky (2006-12-20 19:32:00) [1]> oxffff (20.12.2006 19:27:59) [119]
Не вижу смысла возвращаться к старым сообщениям.
Мне бы кто приготовил.
oxffff (2006-12-20 19:27:00) [2]
> Anatoly Podgoretsky © (20.12.06 19:25) [118]
> > oxffff (20.12.2006 19:23:57) [117]
>
> К дисскуссии.
Посмотрите [113],
я пошел жене ужин готовить. :)
Загляну позже.
Anatoly Podgoretsky (2006-12-20 19:25:00) [3]> oxffff (20.12.2006 19:23:57) [117]
К дисскуссии.
oxffff (2006-12-20 19:23:00) [4]
> Anatoly Podgoretsky © (20.12.06 19:16) [115]
> > oxffff (20.12.2006 19:07:54) [114]
>
> А я давно, гораздо раньше интерес потерял.
К чему?
SergP (2006-12-20 19:19:00) [5]> [11] Anatoly Podgoretsky © (19.12.06 16:32)
> > SergP (19.12.2006 16:29:07) [7]
>
> > Оно не знает что такое Btn_OK
>
> Почему не знает, предположение/телепатия
телепатия...
Просто не стал объяснять "правильным языком", ибо долго писать, а человек и так поймет...
Anatoly Podgoretsky (2006-12-20 19:16:00) [6]> oxffff (20.12.2006 19:07:54) [114]
А я давно, гораздо раньше интерес потерял.
oxffff (2006-12-20 19:07:00) [7]
> Anatoly Podgoretsky © (20.12.06 15:44) [109]
> > oxffff (20.12.2006 14:06:28) [88]
>
> > Доказано. Сергей М мы победили.
>
> Тебя победа интересует?
> А я думал другое, вот и ошибаешься в людях.
Да какая победа. :(
Живым бы выйти. :)
Вы прочитали [113]?
Вы все еще на своем настаиваете?
oxffff (2006-12-20 16:15:00) [8]
> Anatoly Podgoretsky © (20.12.06 15:40) [106]
> > oxffff (20.12.2006 15:32:44) [104]
>
> Этот дополнительный параметр называется Result и находится
> при возврате в EAX
Вы опять торопитесь.
Не хотите посмотреть что внутри?
Перед вызовом
lea eax,[ebp-tmpVarOffset]
push eax
call abc
..
mov eax,[ebp-tmpVarOffset]
//Здесь в eax после возврата из abc, тоже что и перед вызовом abc, но это не результат
Вот вам доказательство
function abc:mytype;stdcall;
var a,b,e,c,d:integer;
begin
result.a[1]:=2;
a:=5;
b:=6;
showmessage(inttostr(a*b));
end;
procedure TmainForm.Button5Click(Sender: TObject);
var a:Mytype;
begin
a:=abc;
// В ЕAX "Мусор"
showmessage(inttostr(a.a[1]));
end;
По выходу в еax совсем не то.
И что сейчас не согласитесь?
oxffff (2006-12-20 16:13:00) [9]
> Anatoly Podgoretsky © (20.12.06 15:40) [106]
> > oxffff (20.12.2006 15:32:44) [104]
>
> Этот дополнительный параметр называется Result и находится
> при возврате в EAX
Вы опять торопитесь.
Не хотите посмотреть что внутри?
Перед вызовом
lea eax,[ebp-tmpVarOffset]
push eax
call abc
..
mov eax,[ebp-tmpVarOffset]
То что eax = ebp-tmpVarOffset после выхода не говорит о том, что это результат
Вот вам доказательство
function abc:mytype;stdcall;
var a,b,e,c,d:integer;
begin
result.a[1]:=2;
a:=5;
b:=6;
showmessage(inttostr(a*b));
end;
procedure TmainForm.Button5Click(Sender: TObject);
var a:Mytype;
begin
a:=abc;
// В ЕAX "Мусор"
showmessage(inttostr(a.a[1]));
end;
По выходу в еax совсем не то.
И что сейчас даже не согласитесь?
oxffff (2006-12-20 16:11:00) [10]
> Anatoly Podgoretsky © (20.12.06 15:40) [106]
> > oxffff (20.12.2006 15:32:44) [104]
>
> Этот дополнительный параметр называется Result и находится
> при возврате в EAX
Вы опять торопитесь.
Не хотите посмотреть что внутри?
Перед вызовом
lea eax,[ebp-tmpVarOffset]
push eax
call abc
..
mov eax,[ebp-tmpVarOffset]
То что eax = ebp-tmpVarOffset после выхода не говорит о том, что это результат
Вот вам доказательство
function abc:mytype;stdcall;
var a,b,e,c,d:integer;
begin
result.a[1]:=2;
a:=5;
b:=6;
showmessage(inttostr(a*b));
end;
procedure TmainForm.Button5Click(Sender: TObject);
var a:Mytype;
begin
a:=abc;
// В ЕAX "Мусор"
showmessage(inttostr(a.a[1]));
end;
По выходу в еax совсем не то.
И что сейчас даже не согласитесь?
Сергей М. (2006-12-20 15:51:00) [11]
> Anatoly Podgoretsky © (20.12.06 15:39) [105]
Ну тогда и dll тут тоже всуе упомянут тобой)
В EAT прописаны всего лишь адреса точек входа, и ты это прекрасно знаешь. Ни о каких [EDX]:EAX/AX/AL там нет даже и намека - кто как хочет, тот так и получает возвращенные вызванной эксп.ф-цией результаты, на свой страх и риск)
Anatoly Podgoretsky (2006-12-20 15:44:00) [12]> oxffff (20.12.2006 14:06:28) [88]
> Доказано. Сергей М мы победили.
Тебя победа интересует?
А я думал другое, вот и ошибаешься в людях.
Anatoly Podgoretsky (2006-12-20 15:43:00) [13]> oxffff (20.12.2006 14:06:28) [88]
Это чей код и что тут делает EAX?
mov eax,[ebp-$08]
Anatoly Podgoretsky (2006-12-20 15:42:00) [14]> Anatoly Podgoretsky (20.12.2006 15:40:46) [106]
Кстати у меня никаких проблем с возвратом, хоть из Паскаль функции, хоть из АСМ функции нет, ты это рассказывай автору, у меня проблем с этим нет, абсолютно никаких. Смогу вернуть и из Фортрана, и из Пролога.
Anatoly Podgoretsky (2006-12-20 15:40:00) [15]> oxffff (20.12.2006 15:32:44) [104]
Этот дополнительный параметр называется Result и находится при возврате в EAX
Anatoly Podgoretsky (2006-12-20 15:39:00) [16]> Сергей М. (20.12.2006 15:24:43) [103]
Ну если ты про умба-юмба, то обсуждай это на форуме умба-юмба
А здесь у нас Wintel и Дельфи
oxffff (2006-12-20 15:32:00) [17]
> Anatoly Podgoretsky © (20.12.06 15:08) [98]
> > oxffff (20.12.2006 14:15:32) [92]
>
> Немного извиняюсь, не учел реальные типы, там действительно
> стек FPU
> Остальное через EAX или прямо результат, или указатель,
> на память выделеную при вызове функции.
> Упустил потому что про реальные числа особо речи не стояло.
>
Еще раз прочитайте
For static-array, record, and set results, if the value occupies one byte it is returned in AL;
if the value occupies two bytes it is returned in AX; and if the value occupies four bytes it is returned in EAX.
Otherwise, the result is returned in an additional var parameter that is passed to the function after the declared parameters.
>Anatoly Podgoretsky © (20.12.06 15:10) [99]
> oxffff (20.12.2006 14:48:34) [94]
>Да ну, ну так посмотри в CPU окне, что такое Result
Result, это var параметр переданный через стек.
Вы опять не согласны?
Вы посмотрите под откладчиком на логику. Что и куда.
ЕAX там совсем не причем.
Сергей М. (2006-12-20 15:24:00) [18]
> При том, что они обязаны возвращать данные через указаные
> регистры
С какого перепугу-то ?!
И хост-приложение и длл-модуль разработаны в среде умба-юмба.
Все соглашения, требуемые сист.загрузчиком РЕ-модулей, они соблюдают.
А дальше их дело, как друг-другу передавкать параметры вызовов и получать результаты - никого кроме них это не волнует.
Anatoly Podgoretsky (2006-12-20 15:18:00) [19]При том, что они обязаны возвращать данные через указаные регистры, включая замечание по реальным числам.
Сергей М. (2006-12-20 15:14:00) [20]
> Anatoly Podgoretsky © (20.12.06 15:05) [97]
> а то как бы работали ДЛЛ
Ну ты уже и ДЛЛ приплел) ... Они уж точно ни при чем.
Некий умба-юмба-компилятор сказал стандартному PE-линкеру, мол, на вот тебе некий отн.адрес и имя/ординал точки входа, запхай его в EAT, а остальное не твоя забота. Линкеру инф-ции вполне достаточно для "запихивания".
Давай уже не будем, а ?)