|
|
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Имеется Код: plaintext 1. Всё хорошо, пока не назначить анонимную функцию delphi Код: pascal 1. 2. 3. 4. 5. Код: pascal 1. 2. 3. Анонимные функции это вообще что??? Мне казалось что это обычная функция, только анонимная. Обычная функция Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Анонимная функция Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Это если вызвать из Delphi кода. А если вызвать из СИ то вываливается в av даже не вызвав функцию по адресу ... Может быть так что этот адрес известен только для Delphi ? А СИ менеджер памяти о нём совершенно ничего не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 16:19 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
FoxpcАнонимные функции это вообще что??? Анонимная функция это интерфейс с методом Invoke. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 16:34 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Простыми словами, вызвать анонимную функцию из сей не получится. А жаль.. Удобно было бы пилить вложенные функции, не разбрасывая их по пространству. Так как запихав их в класс, то после вызова метод класса не знает ничего о классе. Это не TMethod ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 17:04 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Foxpc, а зачем конкретно этим методам "знать что-то о классе", а тем более об объекте ? делай в классе статические КЛАССОВЫЕ методы, они по сути глобальные функции скрытые из глобального namespace, аналогично классовые переменные - скрытые глобальные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 17:25 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Arioch, Класс имеет загруженный интерфейс, дёргая методы из которого можно управлять библиотекой. Приходится брать инициализированную переменную классом, и из переменной дёргать вызовы Я подумал, что использовав анонимные переменные, я всегда буду иметь ссылку на класс из self процедуры, раз объявление Код: pascal 1. не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 17:50 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Ну так этот интерфейс, он в момент времени один единственный, или их может быть одновременно много? В случае первого - его можно положить в глобальную переменную, а чтобы "не засорять пространство" - функции и переменную спрятать в класс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 18:10 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
FoxpcArioch, Класс имеет загруженный интерфейс, дёргая методы из которого можно управлять библиотекой. Приходится брать инициализированную переменную классом, и из переменной дёргать вызовы Я подумал, что использовав анонимные переменные, я всегда буду иметь ссылку на класс из self процедуры, раз объявление Код: pascal 1. не работает Вынесите методы которые являются параметрами чужого API в отдельный подкласс и просто используйте по назначению Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: pascal 1. смотря как там описан вызов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 19:39 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Блин. Нашёл вариант! В начале функции, мы присвоим self-у адрес на созданный класс Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Всё заполняется как надо. Но костыль не самый плохой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 22:46 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
FoxpcВсё заполняется как надо. Но костыль не самый плохой Случай ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 23:12 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev, я привык к тому, если под 64 битный компилятор тоже работает, и менеджер утечек молчит. Значит всё в порядке. Вот так на много быстрее работает Код: pascal 1. А утечки памяти и не может быть. Потому что мы заимствуем память существующую. И когда мы уничтожим главный объект, все строки - листы, и прочее будет уничтожено в первом классе. А в скопированном будет лежать мусор, который уже не будет нужный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 23:26 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Мне интересно, а можно вообще без копирования обойтись? Тоже так же как это делает TMethod при вызове.. Он же не создаёт класс заново? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2019, 23:29 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyАнонимная функция это интерфейс с методом Invoke.Точнее экземпляр наследника TInterfacedObject с полями-параметрами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 00:51 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Ещё одно решение Код: pascal 1. 2. 3. Но без ассемблера через код, никак такое не удалось сделать. Может кто подскажет как правильно написать ?Что бы он такое же с генерировал без писанины ассемблера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 01:24 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
white_niggerТочнее экземпляр наследника TInterfacedObject с полями-параметрами Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 01:29 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 02:27 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Анонимки program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Rtti; type TAnonFunc = reference to function(const a, b : string) : string; TAnonFuncImpl = class(TInterfacedObject, TAnonFunc) function Invoke(const a, b : string) : string; end; { TAnonFuncImpl } function TAnonFuncImpl.Invoke(const a, b : string) : string; begin result := '(' + a + b + ')'; end; function GetAnonFunc(const APrefix : string) : TAnonFunc; begin result := function(const a, b : string) : string begin result := APrefix + a + b; end; end; var func : TAnonFunc; intf : IInterface absolute func; f : TRttiField; begin func := function(const a, b : string) : string // 1 begin result := a + b; end; // func := GetAnonFunc('text - '); // 2 WriteLn(func('1', '2')); for f in TRttiContext.Create.GetType(TObject(intf).ClassType).GetFields do WriteLn(f.ToString); func := TAnonFuncImpl.Create as TAnonFunc; WriteLn(func('1', '2')); ReadLn; end. 1. Анонимки это интерфейсы. 2. Поля не для параметров, а для контекста (закомментировать 1, раскомментировать 2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 02:38 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
С форматированием Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 02:39 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
FoxpcМне интересно, а можно вообще без копирования обойтись? а это в зависимости от 21836382 AriochНу так этот интерфейс, он в момент времени один единственный, или их может быть одновременно много? потому что AriochВ случае первого - его можно положить в глобальную переменную, а чтобы "не засорять пространство" - функции и переменную спрятать в класс а как сделать последнее тебе и написали Ariochделай в классе статические КЛАССОВЫЕ методы, они по сути глобальные функции скрытые из глобального namespace, аналогично классовые переменные - скрытые глобальные и даже показали X-CiteВынесите методы которые являются параметрами чужого API в отдельный подкласс и просто используйте по назначению Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 11:19 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Foxpcмы присвоим self-у адрес на созданный класс не на класс, а на объект на класс никаких указателей не надо, он у тебя и так есть ,если функция не фиртуальная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 11:24 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
FoxpcЕщё одно решение Код: pascal 1. 2. 3. Но без ассемблера через код, никак такое не удалось сделать. Может кто подскажет как правильно написать ?Что бы он такое же с генерировал без писанины ассемблера Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 11:27 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Я использую вот эту CnCallBack.pas StdcallMethodToCallBack(Self, @метод класса) Ограничения: 1. только stdcall 2. реализована для x86. Для 64 битного режима не работает, там все сложнее. Хотя надо бы реализовать до кучи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 11:38 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Я это пробовал, не работает. Он помещает указатель на self в edx а в eax адрес на pointer и потом делает mov [edx],eax и в итоге в регистре eax лежат левые данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 11:53 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Foxpc, какая разница что в eax? покажи код, тебе же надо в Self поместить адрес объекта с этой трактовки offset Enigne выглядит довольно странно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 12:14 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), Не странно, когда это класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 12:38 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 12:38 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Зачем вообще заниматься хакерством, если можно всё сделать на чистом Delphi и не лезть во внутренние структуры классов? 21836485 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 12:42 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Хм.. Вот так тоже работает корректно Код: pascal 1. 2. Я взял адрес (EBP(0x0019FD04)) + 0x08 = 1703180 И структура self заполнилась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 12:49 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
А вот так вообще никак не реагирует Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 12:54 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Это я ошибся. Ложная инфа. self оставил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 12:56 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Мозг уже кипит. Мне совершенно непонятно с какой магической помощью работает данный ассемблер. Почему вот это работает Код: pascal 1. 2. 3. 4. А вот это не работает Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Притом если написать mov eax, offset Enigne То ничего не изменится в конечном результате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 13:08 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
FoxpcМозг уже кипит. Мне совершенно непонятно с какой магической помощью работает данный ассемблер. почитайте, что означают квадратные скобки в ассемблере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 13:27 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear Penguin, Да pointer ^^^ Я знаю это. Но от них не избавится через обычный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 13:36 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Во-первых тут вообще не нужен ассемблер. Во вторых, чем отличается x := p^ от x := p^^ ? В третьих, чем отличается x := p; x^ := n; от x := p^; x := n; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 14:20 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
впрочем, баги в Дельфи-ассемблере бывают совершенно великолепный, вплоть до компиляции кода прямо противоположного написанному. Но это не тот случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 14:22 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Foxpc, лучше не парься, объяви static функцию, как советует X-Cite, и в ней вызывай свой метод, проиграешь чуток на вызове, но кучу проблем избежишь и с полиморфом, как советует ziv-2014, возиться не советую, очень уж неровно к ним антивирусы относятся, да и на 64-битном коде особого выигрыша они не дают, зато проблем создают ещё больше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 14:40 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)проиграешь чуток на вызове с хрена ли? это обычная глобальная функция, только с переменной Self (которая всё равно константа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 15:24 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)и с полиморфом, как советует ziv-2014, возиться не советую нет там никакого полиморфа, обычное создание функции-заглушки на лету тот же вызов DLL, только сложнее. Это всё тот же старый вопрос: Ariochа это в зависимости от 21836382 AriochНу так этот интерфейс, он в момент времени один единственный, или их может быть одновременно много? Если несколько - то одной глобальной переменной не хватит, и придётся плодить функции. Если один - то просто классовый статический метод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 15:33 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Ariochkealon(Ruslan)проиграешь чуток на вызове с хрена ли? это обычная глобальная функция, только с переменной Self (которая всё равно константа)static метод без потайного параметра, указывающего на класс в вызове потеряешь если нужно выйти с него на нормальный объект Ariochkealon(Ruslan)и с полиморфом, как советует ziv-2014, возиться не советую нет там никакого полиморфа, обычное создание функции-заглушки на лету тот же вызов DLL, только сложнее. смотри внимательно Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. выделение места в куче под код и называется полиморфом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 18:05 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Тут типа что то подобное.. Но НАДО разбираться в этой помойке https://github.com/pyscripter/python4delphi/blob/e6607599147084a61dc832413867826ea43f0aab/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 19:09 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
FoxpcТут типа что то подобное.. Но НАДО разбираться в этой помойке https://github.com/pyscripter/python4delphi/blob/e6607599147084a61dc832413867826ea43f0aab/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas тоже самое, просто чуть более ленивый программист зачем это для питона, где и так есть способы передать указатель, тоже непонятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 19:42 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)в вызове потеряешь если нужно выйти с него на нормальный объект а зачем "выходить на нормальный объект", если объект всего лишь один (или вообще ноль) и лежит в глобальной переменной? kealon(Ruslan)выделение места в куче под код и называется полиморфом Нет, полиморфом называется изменение кода программы, чтобы все команды были другими, а результат их выполнения - тот же самый. Поли-морф, много разных кодов для одного и того же результата. Изначально (MtE, Mutation engine) это вообще было бинарной перекомпиляцией ЕМНИП. Создание нового кода программы, хоть в куче, хоть где - рядовое дело. Например Delphi ваш код компилирует. Например LoadLibrary грузит DLL, у которой статическая линковка зависимых DLL Например VirtualDub создаёт дерево фильтров для копирования видео с обработкой. Надо ещё на всякие мульти-ивенты в spring4D внимательно посмотреть На TVirtualMethodInterceptor из Delphi XE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 20:48 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Кстати, антивирусы иногда и на банальный FPC RTL стойку делают. А на запрос отвечают "ну нам так проще, все равно нормальных программ на этом языке не пишут, так что не жалко" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 20:52 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Arioch, через годик - два и на простой компилятор delphi будут антивирусы орать я видел билдеры которые используют чистый компилятор delphi (15 мб размером) для злых умыслов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 21:14 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Привет. FoxpcЕщё одно решение Код: pascal 1. 2. 3. Но без ассемблера через код, никак такое не удалось сделать. pointer( Self ) := @Form1; С уважением, Polesov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 23:43 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Polesovpointer( Self ) := @Form1; pointer( Self ) := @Enigne; Копи/паст, блин ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2019, 23:46 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Ariochkealon(Ruslan)в вызове потеряешь если нужно выйти с него на нормальный объект а зачем "выходить на нормальный объект", если объект всего лишь один (или вообще ноль) и лежит в глобальной переменной? kealon(Ruslan)выделение места в куче под код и называется полиморфом Нет, полиморфом называется изменение кода программы, чтобы все команды были другими, а результат их выполнения - тот же самый. Поли-морф, много разных кодов для одного и того же результата. Изначально (MtE, Mutation engine) это вообще было бинарной перекомпиляцией ЕМНИП. Создание нового кода программы, хоть в куче, хоть где - рядовое дело. Например Delphi ваш код компилирует. Например LoadLibrary грузит DLL, у которой статическая линковка зависимых DLL Например VirtualDub создаёт дерево фильтров для копирования видео с обработкой. Надо ещё на всякие мульти-ивенты в spring4D внимательно посмотреть На TVirtualMethodInterceptor из Delphi XE загрузчик dll рассматривать как полиморф смысла нет, ибо это часть системы, а свои всегда ровнее под "выделением места в куче под код" подразумевается естественно и выставление ему флагов на запуск PAGE_EXECUTE и исполнение, а не компиляция TVirtualMethodInterceptor можешь не копать, нет там полиморфного кода ну а насчёт рядового дела, неизвестные "загрузчики-распаковщики" вызывают дикие позывы у антивирусов Полиморф - это любая программа, которая модифицирует свой код(если я дорисую к подписи чёрточки это же модификация? так?), а как она это делает выделяет ли на куче или в кодовом блоке правит не особо важно. Очень так живенько с VCL весь полиморфный код выпиливали. по сабжу, тынц - довольно старая статья, показывающая как раньше это было круто, и там же длинный ряд комментов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 00:00 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey1. Анонимки это интерфейсы. 2. Поля не для параметров, а для контекста (закомментировать 1, раскомментировать 2) 1. Под капотом создается TInterfacedObject 2. Интерфейс не способен захватить контекст и нужен только для соглашения вызова в Invoke ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 01:39 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
white_nigger, И без уточнений понятно, что за интерфейсом всегда стоит реализация. Оперируя анонимкой - оперируешь интерфейсом, в этом была суть вопроса. А уж какими средствами он реализуется - дело десятое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 02:33 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Абсолютно согласен. Только изначальный мой пост был для желающего передать анонимку к сишную процедуру. Я хотел уточнить, что это в итоге выльется в вызов метода наследника со всеми вытекающими. А так понятно что интерфейсы юзаются для чистоты и чтоб в итоге очистить объект, реализующий анонимку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 02:50 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
white_niggerKazantsev Alexey1. Анонимки это интерфейсы. 2. Поля не для параметров, а для контекста (закомментировать 1, раскомментировать 2) 1. Под капотом создается TInterfacedObject 2. Интерфейс не способен захватить контекст и нужен только для соглашения вызова в Invoke Способен, потому что в зависимости от контекста, этот интерфейс для анонимной процедуры будет разным, а именно там будут поля для переменных контекста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 09:14 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
PolesovНо без ассемблера через код, никак такое не удалось сделать. pointer( Self ) := @Form1; С уважением, Polesov.[/quot] Это не работает в новых делфях. Нельзя присвоить правый к левому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 11:18 |
|
||
|
Передача аннонимной функции в cи библиотеку
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Полиморф - это любая программа, которая модифицирует свой код Нет, "самомодифицирующийся код" - это отдельный термин. Полиморфные генераторы — исполнимые модули в составе компьютерных вирусов, главной функцией которых является шифрование тела вируса случайным ключом и генерация соответствующего случайного, но работающего расшифровщика. В итоге копии вирусов, зашифрованные полиморфными генераторами, могут не совпадать ни в одном байте и иметь разную длину. При этом это делается при заражении - т.е. создании новых копий вируса на новых файлах, т.е. никакие PAGE_EXECUTE не нужны https://en.wikipedia.org/wiki/Polymorphic_engine https://en.wikipedia.org/wiki/Self-modifying_code Есть пересечение этих множеств https://en.wikipedia.org/wiki/Polymorphic_code In computer terminology, polymorphic code is code that uses a polymorphic engine to mutate while keeping the original algorithm intact . That is, the code changes itself each time it runs, but the function of the code (its semantics) will not change at all. For example, 1+3 and 6-2 both achieve the same result while using different values and operations. ....но данный случай сюда не подходит, потому что алгоритм меняется. Появл\яются новые функции,, которых ранее не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 11:32 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039678]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
108ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 549ms |

| 0 / 0 |
