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

 
Qual é esta mensagem que estou a receber "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Violação de acesso escreva para 0x00000000 em 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 construir 240. É permitido chamar a dll.
 
joo:
Qual é esta mensagem que estou a receber "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Violação de acesso escreva para 0x00000000 em 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 construir 240. A ligação dll está activada.

Exemplo de demonstração do artigo:

4. Apanhamento de excepções em funções DLL

Para evitar o colapso do próprio terminal, cada chamada de função DLL é automaticamente protegida por um invólucro de Excepção sem Solavanco. Este mecanismo evita a maioria dos erros padrão (invocação de memória inacessível, divisão por zero, etc.).

Para verificar a operacionalidade deste mecanismo, vamos criar o seguinte código:

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

e chamá-lo a partir do terminal:

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

Como resultado, haverá uma tentativa de escrever em endereço zero, sendo gerada uma excepção. O terminal interceptá-lo-á, fará um relatório no diário de bordo e continuará o seu trabalho:

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000


 
Renat:
Do artigo, um exemplo de demonstração:

Obrigado. Por isso, não estava muito atento quando li o artigo. :)

PS Eu poderia ter dito algo do género: "Ouve, camarada! Vá reler o artigo de novo" e teria razão. Respeito e respeito, como se costuma dizer.

 
Renat:

Caro pisara,

Sejamos claros - estamos a ter uma discussão entre um teórico e um praticante.
Sem se tornar pessoal, até ao ponto. Um bom teórico conta com a experiência prática, um bom praticante mede sete vezes.

É claro que ninguém o proíbe de lutar pela "paz mundial", mas tenha em conta mais factores do que "porque não melhorar?

Foi o que eu escrevi - não o usarão, porque não querem fazer trabalho de rotina. Terá de receber tudo numa bandeja de prata - todos os indicadores, todo o ambiente do mercado, toda a história em diferentes períodos, etc. E precisa de fazer gráficos, porque não vai manipular todos os indicadores na sua mente.

Por isso, é realmente necessário um terminal completo. E nós damos-lhe: MetaTrader 5 + MQL5 + DLL. Chame-lhe uma estrutura ou simplesmente diga - dê-nos o terminal em código fonte/componentes (porque é isto que está a exigir).

Aqui não se trata de fazer a paz, mas é preciso concordar que facilitar a vida ao programador e melhorar a qualidade do sistema comercial + as suas capacidades de integração ainda não prejudicou ninguém. Não muito longe de exemplos: Borland Delphi, MS .net tem uma estrutura totalmente aberta / base de componentes / diagramas de classes e mesmo uma parte significativa do código fonte (Delphi) para os utilizadores da plataforma.

Os programadores consideram erradamente "poderoso" ser capaz de escrever scripts para sistemas comerciais em línguas nativas desprotegidas, e depois ficam surpreendidos por ninguém ir sequer usar as suas criações. É por isso que morrem antes de nascerem. Aqueles que desenvolveram e criaram uma comunidade de utilizadores pensam muito mais profundamente (porque já tinham batido antes) e não cometem tais erros.
Sejamos realistas. Se quiser lançar um software e vendê-lo, em seis meses ou um ano lançar uma actualização paga, então a protecção do código é muito importante para si. Se você, como eu o entendo, estiver aqui a longo prazo e melhorar continuamente a plataforma com uma cadeia de construções e apoio, então nenhum concorrente o apanhará. Mas os utilizadores serão capazes de escrever códigos muito melhores. E não só o código, mas também a estrutura TC, que não é menos importante! Posso até trazer uma analogia com os antivírus - o hacking do cliente AV ainda não dá acesso à actualização da base de dados de vírus (aqui - quotas).

Chamada de DLL controlada (desactivada por defeito) é aceitável, mas descarregar DLLs feitas por alguém para o seu terminal comercial é um buraco pior do que um Internet Explorer 6 não corrigido.
Portanto, este buraco é apenas uma permissão do utilizador! Como pode um mau utilizador garantir 100% de ausência de DLL nocivas, mesmo que seja assinada pela empresa X? Afinal, se o proibisse em dúvida, nunca saberia se lhe seria útil ou não. Por isso, aqui temos alguma psicologia.


Para sua informação, estatísticas do Google Trends sobre terminais comerciais com automatização:

Será que a escala de ordenados é logarítmica?
A propósito, os dados russos são interessantes e podemos ver que o Metastock vermelho é líder:

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

Utilize as funções regulares "Responder", por favor. É muito desconfortável de ler.

Para quebrar um bloco citado, coloque o cursor onde desejar e seleccione o estilo "Texto simples" ou prima Ctrl+1.


Em geral, recomendo que se pare com este tipo de conselho - é fundamentalmente mortal, baseado em pressupostos errados e não adequado para a linguagem aplicada.

Como uma piada, há uma velha piada:

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

Um transeunte aproxima-se de um judeu, atira um rublo e diz:

- Ouça, mude o sinal, senão ficará com fome.

Quando o transeunte saiu, o judeu virou-se para o seu vizinho e disse:

- Compreendes, Izya? Este homem vai ensinar-nos sobre comércio!

 
Renat:

Utilize as funções regulares "Responder", por favor. É muito desconfortável de ler.

Para quebrar um bloco citado, coloque o cursor no lugar certo e seleccione o estilo "Texto simples" ou prima Ctrl+1.


Geralmente, recomendo que se pare com este tipo de conselho - é fundamentalmente assassino, baseado em pressupostos errados e não adequado para uma linguagem aplicada.

Como uma piada, há uma velha piada:


OK, se não quiser dar as verdadeiras razões pelas quais a premissa é assassina e porque é que o quadro .net está apertado para si, a discussão acabou. Em relação à piada, medida para si, o mosteiro é seu.

Continua a desejar boa sorte a todos para não olharem para trás depois da actualização para 5.

 
Renat, muito obrigado pelo artigo! É muito interessante e informativo. Infelizmente, não consegui utilizar o script MQL5DLL Test.mq5. Fiz tudo como descrito no artigo. Contudo, quando corri o guião, o MT5 acabou de cair. Não sei qual é o problema. Poderá ser a questão dos eixos? Estou a executar o MS Vista x64. Por favor, aconselhe como consertá-lo :-)
 
denkir:
Renat, muito obrigado pelo artigo! É muito interessante e informativo. Infelizmente, não consegui utilizar o script MQL5DLL Test.mq5. Fiz tudo como descrito no artigo. Contudo, quando corri o guião, o MT5 acabou de cair. Não sei qual é o problema. Poderá ser a questão dos eixos? Estou a executar o MS Vista x64. Por favor, aconselhe como consertá-lo :-)

Leia novamente o artigo na íntegra, por favor.

Há apenas um lugar sobre a geração de erros (escrita em endereços zero) dentro de DLL, e mais erros apanhados pelo terminal sem colisão. É necessário comentar o apelo do método fnCrashTest.

Hoje irei verificar este código no Vista x64 - talvez seja erro nosso.

 
Renat писал(а) :

Leia novamente o artigo na íntegra, por favor.

Há apenas um lugar sobre a geração de erros (escrever em endereços zero) dentro de DLL e apanhar mais este erro por terminal, sem colisão. Deve comentar a chamada do método fnCrashTest.

Hoje irei verificar este código no Vista x64 - talvez seja erro nosso.

Sim, li tudo cuidadosamente e mais do que uma vez :-))

Esqueci-me de vos dizer que comentei a função fnCrashTest(int arr) no script MQL5DLL Test.mq5. Continuo a ter um acidente. :-(

É este o seu aspecto. Ou tenho de comentar a função fnCrashTest(int arr) no código dll?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed(int &res1,double &res2);
void fnFillArray(int &arr[],int arr_size);
void fnReplaceString(string text,string from,string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1) que versão do terminal é 32 ou 64 bit?

2) que versão da dll é 32 ou 64 bit?

Razão: