- Substituição de Macro (#define)
- Propriedades de Programa (#property)
- Incluindo Arquivos (#include)
- Importando Funções (#import)
- Conditional Compilation (#ifdef, #ifndef, #else, #endif)
Importando Funções (#import)
Funções são importadas a partir de módulos MQL5 compilados (arquivos *.ex5) e a partir de módulos do sistema operacional (arquivos *.dll). O nome do módulo é especificado na diretiva #import. Para que o compilador formate corretamente a chamada da função importada e organize a correta transferência de parâmetros, é necessária uma descrição completa das funções. Descrições de função sucedem imediatamente à diretiva #import "nome do módulo". O novo comando #import (pode-se sem parâmetros) completa o bloco da descrição das funções importadas.
#import "file_name"
|
Funções importadas podem ter qualquer nome. Funções importadas podem ter qualquer nome. Você pode importar simultaneamente módulos - de diferentes funções - com o mesmo nome. Funções importadas podem ter nomes que coincidem com os nomes de funções internas. A operação de resolução de contexto determina quais das funções devem ser chamadas.
A ordem de pesquisa do arquivo especificado após a palavra-chave #import é descrita na seção Chamada de Funções Importadas.
Já que funções importadas estão do lado de fora do módulo compilado, o compilador não pode verificar a validade dos parâmetros passados. Portanto, para evitar erros em tempo de execução, deve-se descrever com precisão a composição e ordem dos parâmetros passados para funções importadas. Parâmetros passados para funções importadas (tanto de EX5, como de módulo DLL) podem ter valores por padrão.
Nas funções importadas, você não pode usar como parâmetros:
- pointers (*);
- links de objetos que contenham arrays dinâmicos e/ou ponteiros.
Nas funções importadas da DLL, você não pode passar - como parâmetros - classes, arrays de string ou objetos complexos contendo strings e/ou arrays dinâmicos de qualquer tipo.
Exemplos:
#import "stdlib.ex5"
|
Para importar funções durante a execução de um programa mql5, é usada vinculação inicial (early binding). Isso significa que a biblioteca é carregada durante a carga de um programa usando seu programa ex5.
Não é recomendado que usar o nome completo do módulo a carregar, como Drive:\Directory\FileName.Ext. Bibiliotecas MQ5 são carregadas a partir da pasta terminal_dir\MQL5\Libraries.
Se a função importada tiver diferentes opções de chamada para as versões de 32 e 64 bits do Windows, você deverá importar ambas e chamar explicitamente a variante de função desejada com ajuda da variável _IsX64.
Exemplo:
#import "user32.dll"
|
Importando funções de bibliotecas .NET
Para trabalhar com as funções da biblioteca .NET, basta importar a própria DLL sem especificar funções específicas. O MetaEditor importa automaticamente todas as funções com as quais é possível o trabalho:
- Estruturas simples (POD, plain old data), isto é, estruturas que contêm apenas tipos de dados simples.
- Funções estáticas públicas cujos parâmetros usam apenas tipos simples e estruturas de POD ou seus arrays.
Para chamar funções da biblioteca, basta importá-la:
#import "TestLib.dll"
|
O código C# para a função Inc da classe TestClass é semelhante ao seguinte:
public class TestClass
|
Como resultado, o script retornará o valor 42.
Veja Também