Opção 1) descobrir onde colocar o arquivo def. Sem ele, você provavelmente não chegará a lugar algum.
Opção 2) instalar o Visual Studio
LOL
opção 3:
existem testadores, pelo menos da VB excel - verifique se a função solicitada é chamada.
Se não - más configurações do linker, sim - não um erro na descrição do MQL
Com a instalação do MT4, uma boa DLL de fonte C é entregue - utilize-a para treinamento, economizará muito tempo.
#importar "PExpDll.dll"
int GetIntValue(int);
duplo GetDoubleValue(duplo);
string GetStringValue(string);
#importar
De acordo com as regras de declaração de função na MQL-4, você tem um erro claro:
int GetIntValue(int X); double GetDoubleValue(double X); string GetStringValue(string X);
Não há nome de parâmetro de entrada, apenas tipo. Isto não é permitido na MQL-4.
De acordo com as regras de declaração de função na MQL-4, há um erro gritante:
Não há nome de parâmetro de entrada, apenas tipo. Na MQL-4 não é permitido.
O que o compilador não pragueja, você pode.
Eu tentei escrevê-lo desta maneira:
#import "timeService.dll" // функция, выдающее смещение от Utc // до времени сервера и до локального времени int timeService( string , // <--- убрал имя переменной int & utcToServer[], int & utcToLocal[] ); #import
Tudo funciona bem.
Na verdade, de acordo com os cânones C e C++, não é necessário especificar os nomes dos parâmetros.
Além disso, na maioria dos casos o programador está ocupado sentado e comentando sobre eles.
Muito obrigado por seus conselhos, obrigado por responder.
1. No MT4 eu tenho a opção Service-Settings-Advisors-Confirm call of dll functions assinalada. Então, quando eu faço script, ele me pergunta se eu deveria chamar tal função...? Eu seleciono "Sim" e então vem o seguinte erro: não é possível chamar a função da dll (erro 127).
2. E as declarações de funções sem parâmetros como o duplo GetDoubleValue(duplo), está escrito assim nas amostras, especialmente porque o compilador não reclama sobre isso, então está tudo bem.
3. Mas e o def-file... Claro, talvez seja por causa do def-file, mas eu realmente não sei onde colocá-lo. Nos projetos C++ Builder 6 e 2009 não existem tais arquivos com tal extensão, ou seja, ao construir a dll em si, parece não haver onde colocá-la. Na mesma pasta com o mesmo nome na pasta de especialistas {\i1}MetaTrader 4\i}libraries não é a mesma... experimentou... Em resumo, não está claro. Tentei outro exemplo onde um sistema dll pronto é usado
#importar "kernel32.dll
int _lopen (caminho de cordas, int de);
int _lcreat (caminho de cordas, int attrib);
int _llseek (int handle, int offset, int origin);
int _lread (int handle, string buffer, int bytes);
int _lwrite (int handle, string buffer, int bytes);
int _lclose (int handle);
#importar
Estas funções são chamadas. A razão para a amostragem DLLS não é clara.
Se a razão está no Linker, qual pode ser? Parece que estou tornando o arquivo autônomo.
Uh... sim... eu não entendo. O exemplo no MT4 está funcionando com certeza? Alguém verificou para ver se funciona?
Obrigado a todos vocês por responderem e responderem.
{...} 3. Quanto ao arquivo def... É claro que pode ser por causa disso, mas não está realmente claro onde colocá-lo. Nos projetos C++ Builder 6 e 2009 não existem tais arquivos com esta extensão, ou seja, quando se constrói a dll em si, parece não haver onde colá-la. Na mesma pasta com o mesmo nome na pasta de especialistas {\i1}MetaTrader 4\i}libraries não é a mesma... experimentou... Em resumo, não está claro. Tentei outro exemplo que usa um sistema pronto dll {...}
Estas funções são chamadas... A razão para a amostragem DLLS não é clara.
Se a razão está no Linker, qual poderia ser? Parece que estou tornando o arquivo autônomo.
M...sim...não está claro. O exemplo no MT4 tem certeza de que funciona? Alguém já o testou para ver se funciona?
Obrigado a todos vocês por responderem e responderem.
1) embora o construtor seja ahem... "ligeiramente" errado, o arquivo def ainda é necessário
2) Você já tentou instalar o Visual Studio?
3) exemplo de obra. construtor errado.
1) apesar de o construtor ser ahem... "ligeiramente" errado, o arquivo def ainda é necessário
2) você ainda não tentou o Visual Studio
3) exemplo de obra. construtor errado.
eu realmente fiz dlls para mt4 em bilder, def-file não foi útil...
Eu costumava fazer dlls para mt4 no dibilder, o def-file não era útil...
Compartilhe um exemplo com um colega :-).
Talvez você precise escrever algum rabisco antes de declarar sua função ali.
.
E mais bilder... Eu ainda tenho uma cópia de 6 com 4 pacotes de serviços.
Deixou de usá-lo depois de um caso engraçado :-).
Quando eu adiciono uma função a um arquivo .cpp, recebo todo tipo de falhas :-).
As falhas consistiam em que o construtor mentiria sobre os parâmetros passados para a função através da pilha.
Você apaga a função - tudo está bem novamente.
Também posso lembrar variáveis globais que são acessíveis apenas a partir de um módulo,
onde são declarados, e do resto você vê lixo :-).
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Eu quero aprender como importar funções da dll. Eu tentei variantes diferentes, mas o seguinte erro continua surgindo: não é possível chamar a função da dll (erro 127).
1. Eu tentei compilar meu projeto no C++ Builder 6.
2. mesmo projeto em C++ Builder 2009.
3. Eu criei um projeto a partir do exemplo DLLS em C++ Builder 2009, compilando-o.
O mesmo resultado em todos os lugares: não pode chamar a função da dll (erro 127).
Para testá-lo, eu uso o script com PExpDll.dll - biblioteca compilada em C++ Builder 2009 do exemplo DLLSample, que vem com MetaTrader 4.
Aqui está este roteiro:
#direitos autorais "Copyright © 2008, MetaQuotes Software Corp."
#link da propriedade "https://www.metaquotes.net//"
#importar "PExpDll.dll"
int GetIntValue(int);
duplo GetDoubleValue(duplo);
string GetStringValue(string);
#importar
//+------------------------------------------------------------------+
//| função de início do programa de script |
//+------------------------------------------------------------------+
int start()
{
//----
Imprimir ("Script start");
GetStringValue("Será que isto vai funcionar?");
GetIntValue(10);
//----
retorno(0);
}
//+------------------------------------------------------------------+
Por favor, ajude-me, diga-me o que estou fazendo de errado...?
Agradecemos antecipadamente.