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
O autor do artigo é muito grato por uma apresentação tão acessível de informações sobre a interoperabilidade de IPC sem dlls de bicicletas.
Trabalhar com a memória me parece um pouco complicado, mas a abordagem é clara, exceto por algumas perguntas que espero que pessoas com conhecimento ajudem a entender:
1. Com a ajuda do memcpy, copiamos uma variável short de dois bytes para a matriz uchar[2]. Como as informações são colocadas na própria matriz?
Em que formato estarão os valores nos índices 0 e 1 da matriz uchar?
O valor é dividido por byte por byte e gravado na matriz, ok... Acho que estou entendendo.
Não consigo entender quais valores entram nessa matriz e como obter o valor original a partir deles; a questão não é que eu não possa exibir esses valores na tela.
2. Como preencher corretamente a matriz uchar[4] com valores de tipos diferentes ao copiar memcpy, por exemplo:
Parece que a resposta é trivial e tudo é feito de forma simples, mas como escrevê-la corretamente?
Você já experimentou oPrint?
O quarto exemplo apresenta o erro: 'operator=' - illegal operation use SAMPLE_04.mq4 34 7
#property copyright ""
#property link ""
#property version ""
#property strict
//Пример 4. Копирование структур средствами MQL5
//---
struct str1
{
double d; // 8 байт
long l; // 8 байт
int i[3]; // 3 * 4 = 12 байт
};
//---
struct str2
{
uchar c[ 8 + 8 + 12 ]; // размер структуры str1
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
str1 src; //
src.d = -1; //
src.l = 20; //
//--- заполняем параметры структуры
ArrayInitialize(src.i, 0);
str2 dst; //
//--- превратили структуру в байтовый массив
dst = src; // <----- Ошибка
}
Entendo a ideia sobre a seção de memória, mas talvez as definições não estejam corretas?
Você pode me dizer qual é o motivo?
Desde já, obrigado.A ideia de um local de memória é clara, mas talvez haja algo errado nas definições?
Qual é o motivo?
Estruturas de tipos diferentes não podem mais ser copiadas, o MQL removeu essa possibilidade.
usar união
uchar está errado, a propósito, e double também está presente de forma suspeita.
E, a propósito, src deve especificar o que exatamente pertence a ele e será passado.
Alguém já o corrigiu exatamente como você sugeriu. Muito bem. Pense nisso. Boa sorte.
ele funcionará para mql4 hoje?
As linguagens (MQL4 / MQL5) são completamente iguais agora - a diferença está em 2-3 funções que faltam na MQL4(ArrayPrint e algo mais pequeno) e em "novos recursos" para a MQL5 - banco de dados, DirectX e OpenCL.
Mas o artigo foi escrito há 8 anos, agora a MQL se tornou uma linguagem estritamente tipada e, para atribuir duas estruturas (exemplo no artigo), você precisa escrever um construtor de cópia ou serializar a estrutura em uma matriz de bytes e, em seguida, retornar.
A atribuição de structs de tipos diferentes não funciona mais( a conversãode parâmetros não é permitida - espera-se uma variável do mesmo tipo).
Mas seria possível trabalhar com uniões: