lang • extdecl

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