Discussão sobre "Como escrever uma DLL para MQL5 e trocar dados em 10 minutos". - página 8

 
avoitenko:

Declaração da função DLL

Chamada de uma função DLL

Exactamente! Foi exactamente isso que eu fiz. Obrigado!
 

No último exemplo, também fez algumas alterações à dll, não fez?

É a isso que me refiro.

bool ExcelSetTextCell(int X,int Y, uchar& Value[]);
 

Poderia também dar-me uma dica, se não for muito incómodo. Há uma dll, um valor de texto é-lhe passado, a saída é um número em cadeia do tipo

Por exemplo, como este:

#import "n1.dll"
string fData (string a1);
#import

....

string znak = fData ("a");

// При значении "a" переменная znak будет равна например "172371", далее я значение znak конвертирую в int
// Так всё было в МТ4.

Não posso corrigir o dll devido à falta de conhecimento. Aconselhar como fazer um código correcto para o passar para dll, e como o receber correctamente. Tenho a sensação de que o meu dll não vai funcionar no MT5.

Obrigado antecipadamente pela ajuda.

Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
Killa:

Poderia também dar-me uma dica, se não for muito incómodo. Há uma dll, um valor de texto é-lhe passado, a saída é um número em cadeia do tipo

Não posso corrigir o dll devido à falta de conhecimento. Por favor, aconselhar como escrever correctamente o código para o submeter à dll, e como obtê-lo correctamente. Porque o meu dll não funciona em MT5 neste momento.

Obrigado antecipadamente pela vossa ajuda.

Verifiquei novamente o trabalho com retorno de strings da DLL e encontrei erro em x64 (apareceu após algumas optimizações). A correcção será incluída na próxima construção.

Se estiver a trabalhar em x64, aguarde, por favor, pela libertação da construção.

A única coisa que posso acrescentar, lembre-se que a MQL5 funciona com cordas Unicode.

 
Simplificando, tem de reescrever a dll...
 
Quero sentir o poder dos dlls, eles falam muito sobre eles. A questão é simples, por onde começar. O que descarregar, o que ler, a que fórum ir, 5-6 pontos por favor. Muita coisa nesta vida depende do pêndulo inicial.
 
Renat:

Artigo publicado Como escrever uma DLL para MQL5 em 10 minutos e trocar dados?:

Autor: Renat Fatkhullin

Obrigado pelo artigo. Já a utilizei.

A dica é muito boa. Mas ! Demorei 10 minutos a descobrir como definir correctamente o caminho DLL no VS2010.

Acabou por ser assim:

C:\Users\пп\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Libraries

Sugiro copiar o caminho a partir do MetaEditor.

Ou especificar o seu próprio caminho no ambiente (não o verificou).

E outra coisa, como lidamos com a multithreading?

 

Obrigado pelo artigo. Repeti-o na íntegra, mas quero dizer algumas palavras sobre o que encontrei durante a implementação - estas coisas aparentemente pequenas quase que me deixaram perplexo. O que eu queria esclarecer (usando VS2010 + MT5 (32 bit) construir 756 + Win 7 Máximo x64):

  1. Tentei ligá-la à plataforma x64 e falhei - a razão, tal como a entendo, foi a dependência implícita da DLL criada a partir de bibliotecas padrão do Windows, que por alguma razão carregou a biblioteca x86 - isto não é um problema da MQL5, mas ainda assim vale a pena dizer sobre ela. Consegui sair desta situação instalando MT5 32bit - é feito usando a linha de comando "Installer folder"\mt5setup.exe /32. Irá utilizar DLLs x86. Portanto, recomendo a utilização apenas de x86, pelo menos no início.
  2. O MT5 não conseguiu encontrar um DLL de plugin de forma alguma. O artigo diz para colocar DLL na pasta das Bibliotecas terminais, mas o terminal ainda não o consegue ver. A solução é a seguinte: não importa onde a DLL será armazenada, desde que a localização seja especificada nas variáveis do sistema. Como fazer isto ajudará o Google.

Caso contrário, não é um mau artigo... Respeito!

 

Em 64 bit MT5 exemplo não funciona. O terminal informa que é DLL de 32 bit e não a liga. Mas sob Win32 (como neste exemplo e em todos os outros exemplos - como em Delphi) - todas as DLLs são de 32 bits. Tal como no post anterior, tenho de desinstalar a versão de 64 bits do terminal e instalar uma de 32 bits. Também preciso de saber como fazê-lo, uma vez que a versão de 64 bits é instalada à força. Acontece que o MT5 64 bits é um terminal morto, não sei porque é que é lançado. Caros programadores, se for possível, tornem por favor possível ligar uma DLL de 32 bits a МТ5 64 bits.

Se isto for tecnicamente impossível ou difícil, escreva as armadilhas que esta versão não funcionará com DLL de 32 bits e os utilizadores sofrem e não conseguem compreender o que está errado. E escreva abertamente que a pasta Bibliotecas não está nos directórios do próprio terminal, e sabe onde, e sem experiência, não vai encontrar, nem sequer tente. A propósito, neste lugar secreto há todos os indicadores e peritos, por isso instalando o MT5 pode esquecê-los - se não sabe que tudo isto está numa pasta escondida C:\Users\nAppData\Roaming... ...ou o utilizador pensa que está a instalar um programa bem escrito, o que é um embuste.

 

Deverá melhorar o seu nível técnico.

Para programas de 64 bits, são necessárias bibliotecas de 64 bits e não há forma razoável de ligar bibliotecas de 32 bits. Para instalar a versão de 32 bits, o instalador deve ser executado com o interruptor /32

Reescreverei o artigo e acrescentarei características fixes que foram implementadas há muito tempo no MetaEditor e nas plataformas MT4 e MT5. Muitos criadores não estão a par das novas funcionalidades.