Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2006-08-24 00:41:58 ЛС | профиль | цитата
На развернутый топик времени как-то не очень хватает
Ну хоть коротко:


В нулевом приближении принять картинку не сложнее чем Stream. Их ресурсов же мы получаем (точнее даже не мы сами, а винда нам это дает) блок данных для битмэпа... Вроде бы это известный для винды тип: hBitmap. Насколько я понимаю, на все 100 совпадает с bmp-файлом. То же самое и про иконку ...


А вот если присмотреться по-внимательней, то у нас оказываются данные с разными характеристиками и требующими, соответственно, разного подхода. Аналогичное есть в других языка ВУ: в Дельфи - просто переменная и var-переменная, в CPP - простые переменные и ссылочные... У нас строки, real, integer - аналогичны простым переменным. А stream, array, bitmap - ссылочным. И реализуем мы это, передавая так называемый интерфейс. А именно, необходим указатель на объект и список указателей на методы - и вытворяй все чего дозволено, на здоровье.
В array это сделано явно, а для bitmap и stream - просто считается, что адреса методов известны на этапе компиляции, но смысл остается тот же...

Предположим, что универсальность предполагаемой системы (теперь буду называть это Интерфейсом с большой буквы) взаимодействия приложения-DLL-ки, или HiAsm-плаг - является для меня самой непреложной Аксиомой.
Т.е., я не должен напрягаться, на каком языке писать DLL-ку или плаг. Хоть на FPC, хоть на FASM, хоть на супер-пупер-компиллере (о котором мы сегодня и не знаем, к примеру)

И тут-то мы и смекаем, что отмеченный выше интерфейсный тип совсем не полная панацея
И, чтобы соблюсти требуемую универсальность, следует исключить из интерфейса наши "ссылочные" типы. А это очень досадно...
Другой путь - сделать универсальным И передачу "интерфейса" (с маленькой буквы)
Какие там вопросы...
1) ну, грубо говоря, не все знают, что такое указатель на метод объекта (скажем в CPP я про такое не слышал). Хоть и ничего военного, но разумней передавать просто адреса ф-й с дополнительным первым аргументом (как любят называть в Дельфях - Sender), ну и плюс сам этот Sender
2) типы аргументов и результата должны быть либо общеизвестны, либо нашего гипотетически интерфейсного типа
3) регистровое соглашение, видимо, следует принять за stdcall

Ну и переписать использование Stream и Bitmap незаметно для пользователя (без изменения внешней функциональности). Т.е., сделать их использование аналогичным Array

Вот такая тяжелая стезя....
Если хочется, чтобы можно было написать DLL-ку, с нижней точкой Stream - на CPP, который понятия не имеет о Дельфячем PStream. Да и FPC, который имеет понятие - но там это уже класс, а не объект...
И если не подвергать сомнению исходную Аксиому...
карма: 9

0