воскресенье, 15 ноября 2009 г.

Создание DLL в HiAsm

DLL - это динамически подключаемая библиотека (dynamic link library). Она служит для выноса в неё части кода программы, если её код используется несколькими программами. Благодаря DLL программа может иметь плагины, может обновлять по одному или нескольким модулям и т. д. И HiAsm может создавать такие DLL, чтобы потом использовать их в своих программах.

DLL - это отдельный проект в HiAsm. Для его создания нужно зайти в меню Файл - Новый и выбрать там Windows DLL. Сразу обратите внимание, что проект DLL, как и фоновое приложение, не визуальный. В него нельзя добавить визуальные компоненты и те, которые требуют для работы окно. Соответственно, недоступен редактор формы.

Главный компонент - DLL, который не имеет точек. У него всего 5 параметров, и в первых 4 из них нужно задать имена точек (латиницей). Параметр Icon Задаёт иконку лишь для компонента в проекте, но в Проводнике Windows иконка будет стандартной для этого типа файлов.

Теперь можно добавить точки. Здесь есть своя особенность: точки методов задаются в EventPoints, а событий - в WorkPoints. И хотя отображаться точки из WorkPoints будут слева, а из EventPoints - справа, но при использовании DLL в проекте вы поймёте, какие точки для чего. Также меняются местами и VarPoints с DataPoints.

Для начала выведем с помощью DLL сообщение. Для этого нужен метод, имя которого задайте в параметре EventPoints.



Проект нужно скомпилировать (Запуск - Компилировать), а запустить его нельзя, потому что dll-файлы не запускаются пользователем, а подключаются программой.

Теперь сделаем программу. Со вкладки "Разное" возьмём компонент CallDLL. Он тоже не имеет точек. В параметре DLLName нужно указать путь к dll-файлу, а затем установить у компонента точки, как в dll. В данном случае это 1 метод, и здесь он указывается в параметре WorkPoints. Теперь можно вызвать этот метод любым способом.



Проверьте, правильно ли указано имя dll, а затем запустите программу и нажмите кнопку. Должно быть пустое сообщение. Теперь вам понятно, почему методы в dll-проекте задаются в EventPoints. Формально это, конечно, события, но кнопкой вызываем-то мы метод doMessage, а связь проходит через компоненты-посредники, и получается, что в dll это дополнительное событие.

Теперь рассмотрим двустороннее взаимодействие dll и программы.



Эта dll получает строку и заменяет все символы"а" на "б" и удаляет первый символ строки. Теперь сделаем программу, где это можно использовать.



А это программа, которая использует dll. Она передаёт ей строку и на выходе получает преобразованную строку. Заметьте, что здесь используется не CallDLL, а UseHiDLL - специальный компонент для подключения тех dll, которые сделаны на HiAsm. При вводе имени dll (без расширения) у компонента сразу отображаются точки и появляется иконка, которую задавали в параметре Icon. Этот компонент удобнее предыдущего и работает иногда лучше.

DLL, как и программы на HiAsm, имеет маленький размер и может содержать разные функции. Например, логично туда вынести те функции, которые будут обновляться и дополняться, чтобы потом на сайте выложить для обновления программы только dll.

Ну а если вы делаете программу только для себя, то часто используемые несколькими программами функции можно вынести в одну dll. Тогда функция будет только в ней, а программы лишь будут обращаться к ней, чтобы не писать одну и ту же функцию во всех программах.




Почему именно натяжной потолок Decke? Установка натяжных потолков в Екатеринбурге производится быстро и чисто, никакого доп. ухода не требуется.

Вашей клинике требуется новое медоборудование? Медицинское оборудование для клиник LINLINE, сотрудников обучат обращению с ним!

Если вы хотите придать воротам изысканность, то художественная ковка ворот от компании "Багплюс" вам будет нужна.

9 комментариев:

  1. Спасибо за уроки. Постоянно читаю и смотрю. Большая просьба ,расскажите подробнее о работе с бинарными файлами. Как открыть файл на редактирование , ну что то вроде HEX редактора. У меня никак не получается. 13-й урок я изучил полностью . Но сам открыть бинарник из файла не смог.

    ОтветитьУдалить
  2. Спасибо за уроки!
    Очень хотелось бы увидеть урок по сжатию файлов? имеющимися средствами и особенно, если это возможно, с использованием алгоритма сжатия LZMA.

    ОтветитьУдалить
  3. Прошу прощения файл я собственно уже открываю , но в текстовом редакторе мне нужно видеть байты а не строки ,вот это никак не получается .

    ОтветитьУдалить
  4. Следующая статья будет как раз про работу с бинарными файлами.

    ОтветитьУдалить
    Ответы
    1. автор, напиши пожалуйста как создавать собственные компоненты для hiasm

      Удалить
  5. Вот это я понимаю видео! надеюсь подобного видео в этом блоге будет достаточно ;)

    ОтветитьУдалить
  6. Здравствуйте.
    У меня такой вопрос, вот у меня допустим есть программа которая требует две сторонние dll-ки,
    Возможно ли средствами HiAsm склеить программу с dll файлами, чтоб она не потеряла своей функциональной работоспособности и работала автономно не прибегая к сторонним dll файлам.
    Если это возможно то как? и если да то можно какой нибудь примерчик.

    ОтветитьУдалить
  7. Средствами HiAsm - не знаю, возможно это будет сложно. Но с помощью сторонней программы можно.

    ОтветитьУдалить
  8. Огромное спасибо, буду пробовать.
    Я ешё слышал о проге - Bitarts Fusion она вроде тоже клеит ЕХЕ с dll но нигде не могу её найти.
    Ещё раз благодарю за Ваш труд в оказанной помощи.

    ОтветитьУдалить