Declaração de Funções Externas
{ PUBLIC | PRIVATE } EXTERN
Identificador
(
[ Parameter AS Datatype [ , ... ] ]
)
[ AS Datatype ]
[ IN Library ] [ EXEC Alias ]
Isto declara uma função externa localizada em uma biblioteca compartilhada do sistema.
Argumentos
Os parâmetros de uma função externa pode ser qualquer tipo de dado Gambas, exceto
Variant.
O Gambas irá adequar seus tipos de dados automaticamente aos dados internos da máquina.
Quando está passando um objeto, a função recebe um ponteiro ao seus dados. Se o objeto é uma classe, então
a função recebe um ponteiro aos dados estáticos da classe.
Para qualquer argumento do tipo ponteiro, use o tipo de dado
Pointer.
Você pode usar argumentos
String, a não ser que a função os modifique, porque no Gambas
valores strings podem ser compartilhados.
Valor de Retorno
O valor do retorno de uma função externa pode ser qualquer tipo de dados Gambas, exceto
Object e
Variant.
Se uma função externa retorna uma string, então o Gambas retornará uma cópia dela.
Se você precisa da verdadeira string retornada pela função, use o tipo de dados
Pointer
e a função
StrPtr.
Nome da Biblioteca
O nome da biblioteca é especificado com o argumento
Library. Se você não especificá-la,
então será usada o nome da última declaração
LIBRARY
usada.
O nome da biblioteca deve ser o nome de seu arquivo sem qualquer extensão e número da versão.
Por exemplo, se você quer usar a biblioteca OpenGL chamada
libGL.so.1
no seu sistema, o nome a ser
usado no Gambas é
"libGL"
.
Se você precisar especificar um número de versão da biblioteca (o número depois da extensão
.so
no Linux), você pode adicioná-lo depois do nome da biblioteca, usando um separador vírgula.
Por exemplo, se você precisa especificamente da versão 1.0.7667 da biblioteca OpenGL, você precisará
especificar o nome de biblioteca seguinte:
"libGL:1.0.7667"
.
Examples
' Preciso fazer alguns ioctl's!
EXTERN ioctl(fd AS Integer, op AS Integer, arg AS Pointer) AS Integer IN "libc:6"
...
Err = ioctl(MyStream.Handle, ... )
Nome da função
O nome da função na biblioteca é por padrão o nome da função no Gambas, i.e.
identificador.
Se for impossível, ou não desejado, você pode especificar o nome verdadeiro da função da biblioteca
com a palavra-chave
EXEC
.
Examples
' Este nome de função já é uma palavra reservada do Gambas!
EXTERN SysOpen(Name AS String, Flags AS Integer, Mode AS Integer) AS Integer IN "libc:6" EXEC "open"
Veja também