Início > lang > extdecl 
 en fr de es it nl pl pt mk sq ca hu cs tr ar fa id vi ko ja ru zh zh_TW eo
Anterior  Próximo  Editar  Renomear  Desfazer  Atualizar  Procurar  Administração  
Documentação
História
 
Cuidado! Esta página não está atualizada.  Veja a versão em inglês 
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".

Exemplo

' 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.

Exemplo

' 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

External Function Management