Общие переменные, массивы и функции для модулей.

Начнем пожалуй с общих функций. Для того, чтобы функция была видна в другом модуле , ее достаточно продекларировать в нужном модуле. Пример:

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:

  1. не может иметь внутреннее имя с помощью Alias
  2. работает только с динамическими массивами, поэтому можно изменять размерность массива.
  3. создает и сразу объявляет общие для модулей переменные и массивы, но невидимые для процедур и функций. Если необходима видимость в процедурах и функциях(чаще всего так) , то необходимо при объявлении добавлять ключевое слово 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 

  1. может иметь внутреннее имя с помощью Alias
  2. работает только с обычными массивами, поэтому изменять размерность нельзя.
  3. создает но не объявляет общие для модулей переменные, массивы и объекты. Объявляется общая переменная, массив, или объект так же как обычная с помощью 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 правила те же, что и с функциями, поэтому заострять внимание на них не будем. Если пропустили читайте прошлые статьи. Что касается этой статьи, то вроде как я рассказал все, что нужно, если что упустил, обязательно найду возможность осветить в следующих статьях.

Всего доброго!

содержание | назад | вперед