Era necessário transferir grandes quantidades (gigabytes) de dados. A implementação por meio dessa biblioteca, infelizmente, apresentou desempenho muito baixo.
É incrível como esse truque funcionou para alguém. Com tantas falhas internas... Abaixo está um fragmento de CMemMapApi::Write() ArrayResize(src, size); memcpyX(src, view, size); // pegou o bytebuffer for(int i=0; i
Infelizmente, o FileMapping tem uma desvantagem significativa. Se o aplicativo filho (lendo dados) não tiver concluído seu trabalho corretamente por algum motivo ( chamadas kernel32 ::UnmapViewOfFile e kernel32::CloseHandle) , o "arquivo" permanecerá suspenso na memória até que todos os processos de onde ele foi aberto sejam fechados ( chamadas kernel32::OpenFileMappingW e kernel32::MapViewOfFile). Em particular, você não pode alterar seu tamanho - reabra-o (feche e reabra).
Não encontrei uma solução para o problema. É difícil encontrar uma situação como essa com essa biblioteca, porque cada ação nela começa com a abertura e termina com o fechamento. É por isso que ela é tão lenta. Mas você ainda pode encontrar esse erro. E então o programa MQL falhará com esta mensagem.
поэтому он должен оценить x и ввести значение в ST2 для структуризации. с технической точки зрения При использовании одноуровневой индирекции ST2 x строчит имя введенного макроса но при использовании двойного слоя он строчит значение введенного макроса
Estou tentando verificar o funcionamento deste exemplo https://www.mql5.com/pt/code/818
Estou usando o MT5 Versão: 5.00 build 5370 17 de outubro de 2025.
Por algum motivo, recebo erros ao tentar compilar o arquivo memmap.mq5:
memmap.mq5
MemMapLib.mqh
wrong parameters count, 4 passed, but 3 requires MemMapLib.mqh 2799
long CMemMapFile::Open(string,int,int) MemMapLib.mqh 25119
call resolves to 'long CMemMapFile::Open(string,int,int)' instead of 'long CMemMapApi::Open(string,int,int,int&)' due to new rules of method hiding MemMapLib.mqh 2799
see declaration of function 'CMemMapFile::Open' MemMapLib.mqh 25119
see declaration of function 'CMemMapApi::Open' MemMapLib.mqh 12219
wrong parameters count, 3 passed, but 1 requires MemMapLib.mqh 2929int CMemMapFile::Fill(uchar) MemMapLib.mqh 25314
call resolves to 'int CMemMapFile::Fill(uchar)' instead of 'int CMemMapApi::Fill(long,uchar,int&)' due to new rules of method hiding MemMapLib.mqh 2929
see declaration of function 'CMemMapFile::Fill' MemMapLib.mqh 25314
see declaration of function 'CMemMapApi::Fill' MemMapLib.mqh 12414
wrong parameters count, 4 passed, but 1 requires MemMapLib.mqh 29916int CMemMapFile::Grows(int) MemMapLib.mqh 25514
call resolves to 'int CMemMapFile::Grows(int)' instead of 'long CMemMapApi::Grows(long,string,int,int&)' due to new rules of method hiding MemMapLib.mqh 29916
see declaration of function 'CMemMapFile::Grows' MemMapLib.mqh 25514
see declaration of function 'CMemMapApi::Grows' MemMapLib.mqh 125193 errors, 3 warnings 33
Alguém pode me dizer o que estou fazendo de errado? E como corrigi-lo?
fxsaber #: Os códigos-fonte da biblioteca não atendem aos requisitos atuais da linguagem MQL5.
Há alguma maneira de corrigi-los? Ou é necessário retrabalhar todos os códigos-fonte e é impossível fazer isso sem o autor? Acho que o compilador gerou apenas 3 erros aqui. Seria ótimo se isso pudesse ser corrigido.
Há alguma maneira de corrigir isso? Ou é necessário retrabalhar todos os códigos-fonte e é impossível fazer isso sem o autor? Acho que o compilador apresentou apenas 3 erros aqui. Seria ótimo se isso pudesse ser corrigido.
E aqui eu mesmo já corrigi o código. Aqueles que precisarem podem usá-lo. O Expert Advisor compila com sucesso com ele.
Adicionei isso a partir da linha 251:
using CMemMapApi::Open;
using CMemMapApi::Close;
using CMemMapApi::Fill;
using CMemMapApi::Grows;
using CMemMapApi::Write;
using CMemMapApi::Read;
Era necessário transferir grandes quantidades (gigabytes) de dados. A implementação por meio dessa biblioteca, infelizmente, apresentou desempenho muito baixo.
Tive que refazê-la completamente usando o conjunto original de DLLs. Funcionou rapidamente.
Infelizmente, o FileMapping tem uma desvantagem significativa. Se o aplicativo filho (lendo dados) não tiver concluído seu trabalho corretamente por algum motivo ( chamadas kernel32 ::UnmapViewOfFile e kernel32::CloseHandle) , o "arquivo" permanecerá suspenso na memória até que todos os processos de onde ele foi aberto sejam fechados ( chamadas kernel32::OpenFileMappingW e kernel32::MapViewOfFile). Em particular, você não pode alterar seu tamanho - reabra-o (feche e reabra).
Não encontrei uma solução para o problema. É difícil encontrar uma situação como essa com essa biblioteca, porque cada ação nela começa com a abertura e termina com o fechamento. É por isso que ela é tão lenta. Mas você ainda pode encontrar esse erro. E então o programa MQL falhará com esta mensagem.
Por algum motivo, recebo erros ao tentar compilar o arquivo memmap.mq5:
Alguém pode me dizer o que estou fazendo de errado? E como corrigi-lo?
Os códigos-fonte da biblioteca não atendem aos requisitos atuais da linguagem MQL5.
Há alguma maneira de corrigi-los? Ou é necessário retrabalhar todos os códigos-fonte e é impossível fazer isso sem o autor? Acho que o compilador gerou apenas 3 erros aqui. Seria ótimo se isso pudesse ser corrigido.
Há alguma maneira de corrigir isso? Ou é necessário retrabalhar todos os códigos-fonte e é impossível fazer isso sem o autor? Acho que o compilador apresentou apenas 3 erros aqui. Seria ótimo se isso pudesse ser corrigido.
E aqui eu mesmo já corrigi o código. Aqueles que precisarem podem usá-lo. O Expert Advisor compila com sucesso com ele.
Adicionei isso a partir da linha 251: