Общие переменные, массивы и функции для модулей.
Начнем пожалуй с общих функций. Для того, чтобы функция была видна в другом модуле , ее достаточно продекларировать в нужном модуле. Пример:
1 модуль "1.bas"
Function UIppOO Alias "UIppOO" () As Integer Export Return 25 End Function
2 модуль "2.bas"
Declare Function UIppOO Alias "UIppOO" () As Integer Function AA Alias "AA" () As Integer Export Return UIppOO End Function
Компиляция: C:\Freebasic\fbc -lib 1.bas 2.bas Вызов:
#inclib "1" Declare Function UIppOO Alias "UIppOO" () As Integer Declare Function AA Alias "AA" () As Integer ? UIppOO ? AA Sleep
Мы создали библиотеку из двух модулей, при чем во втором модуле функция UIppOO видна. С другой стороны в первом модуле функция AA не видна, поскольку мы ее там не продекларировали. Не останавливайтесь на прочитанном, обязательно создайте пример выше, желательно по памяти. Пусть не получится с первого раза, получится со второго, третьего. Это даст вам мощный инструмент для создания программ.
А теперь давайте создадим общие переменные, массивы и объекты для модулей. Создаются они двумя способами(командами): Common и Extern.
Характеристики Common:
- не может иметь внутреннее имя с помощью Alias
- работает только с динамическими массивами, поэтому можно изменять размерность массива.
- создает и сразу объявляет общие для модулей переменные и массивы, но невидимые для процедур и функций. Если необходима видимость в процедурах и функциях(чаще всего так) , то необходимо при объявлении добавлять ключевое слово Shared. Для массивов после создания необходимо пересоздание с помощью команды Redim , в которой и устанавливается нужная размерность.
Пример с переменными:
1 модуль "1.bas"
Common Shared a As Integer Function UIppOO Alias "UIppOO" () As Integer Export a+=10 Return a End Function
2 модуль "2.bas"
Common Shared a As Integer Function AA Alias "AA" () As Integer Export a+=25 Return a End Function
Компиляция: C:\Freebasic\fbc -lib 1.bas 2.bas
Вызов:
#inclib "1" Declare Function UIppOO Alias "UIppOO" () As Integer Declare Function AA Alias "AA" () As Integer Common Shared a As Integer ? UIppOO ? AA ? a Sleep
А теперь пример с массивами:
1 модуль "1.bas"
Common Shared a() As Integer Redim a(10) As Integer Function UIppOO Alias "UIppOO" () As Integer Export a(5)=10 End Function
2 модуль "2.bas"
Common Shared a() As Integer Function AA Alias "AA" () As Integer Export a(5)=25 End Function
Компиляция: C:\Freebasic\fbc -lib 1.bas 2.bas
Вызов:
#inclib "1" Declare Function UIppOO Alias "UIppOO" () As Integer Declare Function AA Alias "AA" () As Integer Common Shared a() As Integer UIppOO ? a(5) AA ? a(5) Sleep
Характеристики Extern
- может иметь внутреннее имя с помощью Alias
- работает только с обычными массивами, поэтому изменять размерность нельзя.
- создает но не объявляет общие для модулей переменные, массивы и объекты. Объявляется общая переменная, массив, или объект так же как обычная с помощью Dim один раз в главном модуле (чаще всего это первый модуль). При объявлении не нужно использовать ключевую команду Shared, поскольку общие переменные, массивы или объекты, объявленные с помощью Extern, в любом случае видны в процедурах и функциях.
Пример с переменными:
1 модуль "1.bas"
Extern a As Integer Dim a As Integer Function UIppOO Alias "UIppOO" () As Integer Export a+=10 Return a End Function
2 модуль "2.bas"
Extern a As Integer Function AA Alias "AA" () As Integer Export a+=25 Return a End Function
Компиляция: C:\Freebasic\fbc -lib 1.bas 2.bas
Вызов:
#inclib "1" Declare Function UIppOO Alias "UIppOO" () As Integer Declare Function AA Alias "AA" () As Integer Extern a As Integer ? UIppOO ? AA ? a Sleep
А теперь пример с массивами:
1 модуль "1.bas"
Extern a(10) As Integer Dim a(10) As Integer Function UIppOO Alias "UIppOO" () As Integer Export a(5)=10 End Function
2 модуль "2.bas"
Extern a(10) As Integer Function AA Alias "AA" () As Integer Export a(5)=25 End Function
Компиляция: C:\Freebasic\fbc -lib 1.bas 2.bas
Вызов:
#inclib "1" Declare Function UIppOO Alias "UIppOO" () As Integer Declare Function AA Alias "AA" () As Integer Extern a(10) As Integer UIppOO ? a(5) AA ? a(5) Sleep
Пользовательские общие типы
Со своими типами данных все тоже самое, но шаблон структуры приходится писать в каждом модуле:
1 модуль "1.bas"
Type II a As String End Type Extern a(10) As II Dim a(10) As II Function UIppOO Alias "UIppOO" () As Integer Export a(5).a="FreeBasic" End Function
2 модуль "2.bas"
Type II a As String End Type Extern a(10) As II Function AA Alias "AA" () As Integer Export a(5).a="FreeBasic best" End Function
Компиляция: C:\Freebasic\fbc -lib 1.bas 2.bas
Вызов:
#inclib "1" Type II a As String End Type Declare Function UIppOO Alias "UIppOO" () As Integer Declare Function AA Alias "AA" () As Integer Extern a(10) As II UIppOO ? a(5).a AA ? a(5).a Sleep
При использовании ключевого слова Alias правила те же, что и с функциями, поэтому заострять внимание на них не будем. Если пропустили читайте прошлые статьи. Что касается этой статьи, то вроде как я рассказал все, что нужно, если что упустил, обязательно найду возможность осветить в следующих статьях.
Всего доброго!
содержание | назад | вперед