Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
As funções são chamadas de acordo com certas regras - convenção de chamadas. Para ter certeza de que a função exportada utiliza as regras acima mencionadas, ela deve ser assim: void __stdcall AnyFn();
2. Conheço duas maneiras de fazer exportação de funções de biblioteca - com __declspec(dllexport) e com arquivo def (é mais fácil, caso contrário você tem que lutar com a decodificação de funções além disso). Em VS para incluir o arquivo def no projeto, primeiro adicionar aos arquivos do projeto, depois adicionar o nome do arquivo a: propriedades do projeto/compositor/arquivo de definição de módulo/input/módulo.
P.S: Exemplo de projeto com arquivo def estão localizados em: diretório de terminais\samostraDLLSample.
PASSANDO PARÂMETROS PARA UMA FUNÇÃO DLL
1. Ao passar a variável string, um array de char (caracter ANSI, leva 1 byte) é passado para DLL.
2. Passar int ou duplo para a biblioteca fará com que a variável seja copiada, portanto, quando você muda a variável na dll, não há nenhuma mudança na dll:
3. Para poder mudar as variáveis int e o dobro das variáveis declaradas no MQL, as matrizes devem ser aprovadas:
4. Ao passar um array de cordas, a estrutura MqlStr é passada para a DLL:
P.S.
Sempre que um array ou uma string (string) é passado para a DLL, na verdade é um ponteiro para uma seção de memória (ponteiro) que é passado para a biblioteca da seguinte forma
void __stdcall fn(int *pointer) {} // como este. Desta forma, você pode trabalhar como uma matriz, por exemplo, ponteiro[4] = 4.
void __stdcall fn(int &reference) {} // or so. Mas teremos acesso a apenas um item. É relevante quando se passa um conjunto de um item para a biblioteca.
Não consegui encontrar uma explicação adequada para o * na frente do ponteiro, para que serve? Não é possível passar sem ele ?????
E uma pergunta sobre como obter texto de uma dll ???
Não consegui encontrar uma explicação adequada para o * na frente do ponteiro, para que serve? Não é possível passar sem ele ?????
E uma pergunta sobre como obter texto de uma dll ???
1. Transferência de um fio para o IDC:
2. O sinal * indica que se trata de um ponteiro. Em resumo, qualquer variável tem não só algum valor, mas também um endereço onde ela está localizada na memória. Os apontadores podem trabalhar com este endereço. Esta é uma questão que precisa ser bem compreendida, acho que você deveria conferir os livros em C++;1. Transferência de um fio para o IDC:
2. O sinal * indica que se trata de um ponteiro. Em resumo, qualquer variável tem não só algum valor, mas também um endereço onde ela está localizada na memória. Os apontadores podem trabalhar com este endereço. É um assunto que precisa ser bem compreendido, por isso você pode querer conferir alguns livros em C++;Você só precisa ter cuidado com os dados globais na biblioteca. Os programas MCL funcionam independentemente uns dos outros (mas compartilham variáveis globais porque estão na mesma linha), portanto é possível que vários scripts escrevam e leiam no mesmo local de memória (o que não é bom). Isto requer sincronização, por exemplo, usando seções críticas. Sublinho que isto é verdade para os dados globais (declarados funções externas). Quando funções são chamadas, é criado um conjunto próprio e independente de variáveis.