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