Важная информация
Показано с 1 по 5 из 5

Тема: Библиотеки

  1. #1 Библиотеки 
    Разбирающийся
    Регистрация
    13.10.2013
    Сообщений
    53
    Сказал(а) спасибо
    52
    Поблагодарили 34 раз(а) в 22 сообщениях
    Доброго времени суток.

    Недавно нашел полезным создать библиотеку в среде FreeBasic, но, к сожалению, нигде про них ни слова. В справке не нашел, в Интернете тоже нет (правда, возможно, неправильно искал).

    Смотрел уже готовые библиотеки, но понять мне так и не удалось что к чему.

    По сути: возможно, нужно как-то оформлять библиотеки по-особому, какой-то режим задать нужно (Windows GUI, Windows Console, Library еще что-нибудь?), как писать исходный код библиотек?

    Буду рад любой помощи.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    765
    Сказал(а) спасибо
    318
    Поблагодарили 337 раз(а) в 266 сообщениях
    Записей в блоге
    6
    Привет!

    Идем по этой ссылке: [Ссылки могут видеть только зарегистрированные пользователи. ]

    Смотрим подраздел Модульное программирование

    Желательно прочитать весь этот подраздел, но если интересует только создание библиотек, то две статьи:

    1) Компилирование
    2) Создание статических и динамических библиотек
    Ответить с цитированием  
     

  3. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (04.01.2014), Good.Morning (03.01.2014)

  4. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,819
    Сказал(а) спасибо
    1,806
    Поблагодарили 932 раз(а) в 794 сообщениях
    Записей в блоге
    1
    Стас мы вчера с Good.Morning'ом долго тёрли в скайпе(увидел тему на цайбере), я дал ему ссылку
    на следующую статью с твоего сайта: http://free-basic.ru/modthree.html

    Но т.к. я сам лассось, предложил ему создать тут тему чтобы обсудить некоторые нюансы.
    В общем случае как понимаю есть 2 варианта:

    1) Статическая библиотека юниксового формата (lib****.a) где звёздочки - имя исходника без расширения.

    Примерный код для создания из examples(компилируем в режиме Library, юзаем кнопочку собрать):
    Код freebasic:
    DECLARE FUNCTION AddNumbers ALIAS "AddNumbers" ( BYVAL a AS INTEGER, BYVAL b AS INTEGER ) AS INTEGER
     
    FUNCTION AddNumbers ( BYVAL a AS INTEGER, BYVAL b AS INTEGER) AS INTEGER EXPORT
       FUNCTION = a + b
    END FUNCTION

    Примерный код для использования из examples(режим Windows console):

    Код freebasic:
    #INCLUDE "mydll.bi"
    #INCLIB "mydll"
     
    RANDOMIZE TIMER
     
    DIM AS INTEGER x = RND * 10
    DIM AS INTEGER y = RND * 10
     
    PRINT x; " +"; y; " ="; AddNumbers( x, y )
    SLEEP

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

    2) Динамическая библиотека

    Ну тут как бы всё понятно, код выше(библиотеку) компилируем в режиме windows dll. Код юза точно такой-же,
    но есть ещё и другой вариант использования - самому взять на себя загрузку *.dll.

    Вот второй вариант юза:

    Код freebasic:
    DIM MemDll AS ANY PTR
    DIM AddNumbers AS FUNCTION(BYVAL AS INTEGER, BYVAL AS INTEGER) AS INTEGER
     
    RANDOMIZE TIMER
    DIM AS INTEGER x = RND * 10
    DIM AS INTEGER y = RND * 10
     
    MemDll = DylibLoad("mydll.dll")  '  Получаем хендл библиотеки
     
    IF MemDll = 0 THEN END       '  Если ошибка(нет библиотеки например)
    AddNumbers = DylibSymbol(MemDll, "AddNumbers") '  Получаем указатель на функцию
    IF AddNumbers = 0 THEN END   '  Если функция существует
       PRINT x; " +"; y; " ="; AddNumbers( x, y )
    Dylibfree MemDll             ' Освобождаем DLL
    SLEEP

    Так что Стас поправь где я что накосячил, т.к. сам больше по DOS'у специализируюсь и под виндой могу
    накосячить жестоко.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    Good.Morning (03.01.2014)

  6. #4  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    765
    Сказал(а) спасибо
    318
    Поблагодарили 337 раз(а) в 266 сообщениях
    Записей в блоге
    6
    Но разласосился и забыл уже всё, что давно тёрли на цайбере, что то про связи
    что мол в статику не всё засовывается и можно в определённых условиях опростоволоситься. Так вот мог бы
    ты уточнить что там и как, т.к. боюсь тему, где обсуждали уже не найду.
    Так тут важно понимать, что в каждом языке есть функции и макросы , используемые исключительно в данном языке. Так например у FB есть функция Print. На самом деле это даже не функция , а многофункциональный макрос, который позволяет не только печатать в консоли, но и выводить графику в DIRECTDRAW, печатать в файл и на принтер. То есть при ее использовании, в зависимости от того как она используется, компилятор на этапе компиляции выдергивает нужные функции из нужной библиотеки (или нескольких связанных библиотек). Если мы включим данную функцию в статическую библиотеку и попробуем данную либу на другом языке, у нас конечно ничего не выйдет. В нашей статической либе никакой информации кроме имени для вызова этой функции нет. И только наш компиль знает, что надо делать в разных ситуациях по отношению к PRINT и откуда что брать. Другое дело DLL, в нее компиль запихнет все что требуется.

    Отсюда все просто:

    1) Хочешь создать библиотеку для FB , просто компилируешь ту, что тебе подходит (LIB , DLL). Но в случае, если твоя статическая библиотека использует функции из других статических библиотек (не "родных" FB), то описания(декларации) функций, переменных..., а так же сама "чужая" либа должна быть доступна. Например моя библиотека использует библиотеку ZLIB, в результате мне приходится распространять в архиве не только свою , но и чужую.
    2) Хочешь создать библиотеку для других языков без геморроя , создавай DLL .
    Последний раз редактировалось stabud; 03.01.2014 в 16:29.
    Ответить с цитированием  
     

  7. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (03.01.2014), Good.Morning (04.01.2014)

  8. #5  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,819
    Сказал(а) спасибо
    1,806
    Поблагодарили 932 раз(а) в 794 сообщениях
    Записей в блоге
    1
    Во спасибо Стас, всё разъяснил. Теперь эта инфа на форуме и её не надо искать.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Библиотеки .NET
    от nas92 в разделе .NET
    Ответов: 0
    Последнее сообщение: 06.09.2013, 16:15
  2. Ответов: 2
    Последнее сообщение: 19.08.2012, 18:35
  3. Новая версия объектной библиотеки (в разработке)
    от Абадябер в разделе Проекты на Pascal
    Ответов: 9
    Последнее сообщение: 20.07.2011, 13:39
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •