Passe uma matriz bidimensional da MQL4 para dll - página 3

 
TheXpert:
Não há matrizes multidimensionais na MQL4. Transmita-o como unidimensional. O principal é calcular corretamente o tamanho e transmiti-lo.

int ArrayResize( object&array[], int new_size)
Define o novo tamanho na primeira dimensão da matriz. Se executada com sucesso, a função retorna o número de todos os elementos contidos na matriz após o redimensionamento, caso contrário, retorna -1 e a matriz não redimensiona.
Nota: uma matriz declarada localmente em qualquer função que tenha sido redimensionada permanecerá inalterada após a conclusão da função. Quando a função for chamada novamente, tal matriz terá um tamanho diferente do tamanho declarado.
Parâmetros:
matriz[] - Array para redimensionamento.
novo_tamanho - Novo tamanho para a primeira dimensão.
Exemplo:
double array1[][4]; int element_count=ArrayResize(array1, 20); // novo tamanho - 80 elementos


Esta é uma citação da ajuda e uma resposta simultânea ao autor do post sobre o fato de todas as arrays em MQL serem unidimensionais.

 
Debugger:

Esta é uma citação da ajuda e uma resposta simultânea ao autor do post sobre como todos os arrays em MQL são unidimensionais.

Esta é uma função em cima de uma matriz unidimensional. Tente provar o contrário.
 
Por que reinventar a roda e tentar parecer mais inteligente do que os desenvolvedores C++?
 
Debugger:
Por que reinventar a roda e tentar parecer mais inteligente do que os desenvolvedores C++?

O que pensamos e o que realmente existe O-O-O muitas vezes são coisas DIFERENTES, e ainda mais quando tentamos pensar pelos outros!

Você realmente acha que Vadim não tem nada melhor para fazer do que "parecer mais esperto do que os desenvolvedores"? Você conhece o homem tão bem para fantasiar dessa maneira?! Eu teria medo de viver em um mundo distorcido a tal ponto. :)))

E se uma pessoa muda/modifica/redesigna algo que foi criado anteriormente por outra pessoa - isso é um direito dele! É NORMAL mudar o mundo por si mesmo, embora seja contra o aceito "curvar-se para o mundo em mudança"... ;)

 

Onde será que se encontra tal "bicicleta"? :-))

Antes de escrever, escavei tudo. Nem mesmo em Boost. Sem mencionar o C++, que não tem nada a ver com isso, e também não existe tal coisa no STL.

A propósito, não existe uma solução completa para este problema. Não vou entrar em detalhes, mas as capacidades do C++ são insuficientes para resolver este problema.

Consultei sobre Windgrad. Há alguns bons programadores lá. Assim que aprenderam a tarefa, eles previram imediatamente alguns problemas específicos. É claro que resolvi quase todos eles. Em princípio, ainda havia outras insolúveis. Estes são problemas relacionados ao manuseio do conteúdo da matriz através dos operadores de indexação "[]". Ninguém na Internet sabe como fazer isso. Eu fiz uma muleta. Agora podemos trabalhar quase totalmente com operadores "[]" mas temos que fornecer um certo tipo de índice até a última dimensão (o que podemos facilmente esquecer de fazer e o compilador não nos avisa). Depois funciona como uma matriz multidimensional comum com indexação através de []. Ou seja, o operador é sobrecarregado 4 vezes com um tipo de índice diferente. Uma sobrecarga retorna o conteúdo da célula pelo último cálculo de índice linear feito pelos operadores [] anteriores. O resto das sobrecargas devolvem um objeto para que o operador [] possa ser usado novamente. Em alguns casos é acionado um operador do tipo fundido que retorna o conteúdo da célula acessada pela última vez. Em alguns casos, isto não funciona. Pode haver alguns problemas que você só conhecerá depois que o programa não funcionar corretamente. Em alguns casos, o compilador ajuda. Em outros, são as exceções que se aplicam a possíveis erros de usuários. Tentei providenciar para todos os casos.

Os principais problemas são estes:

a[0][1][2] = a[0][1][3] + a[0][5][2] / a[0][8][12]; // Здесь на всякий случай надо в последнем измерении использовать тип _SIZE_T. Для логических операций тоже надо.

Há o método at(). Ela substitui completa e completamente os operadores "[]".

A classe é protegida por uma seção crítica para trabalhar em aplicações multi-tarefas.

 
Zhunko:

Não, está além de mim, não posso lê-lo silenciosamente.

Você é um nub ciclista. A implementação mais simples foi publicada não há muito tempo em mql5 (!) com um tamanho de linha de 100 linhas.

 
TheXpert:

Não, está além de mim, não posso lê-lo silenciosamente.

Você é um nub ciclista. A implementação mais simples foi publicada não há muito tempo em mql5 (!) com um tamanho de linha de 100 linhas.

É um lixo lá fora.
 
Zhunko:
Isso é uma besteira.

Oh sim, sem tretas somente do grande guru Vadim, ajoelhe-se diante de seu semblante.

Ugh... Os infratores têm o maior ego. Eles aprenderam a usar a msdn e a ajudar, escreveram mais de 1000 linhas de texto e é isso, sou uma estrela. Ouvi em algum lugar a palavra singleton e XP, é isso, eu conheço os padrões e métodos de programação. Eu sou um maldito designer...

Você deveria se envergonhar, você não é um garoto.

 
Vadim! Você está interessado em perder seu tempo neste nível ("você mesmo é um tolo") de argumentaçãopor pessoas "autodestruídas"???
 
TheXpert:

Oh sim, sem tretas somente do grande guru Vadim, ajoelhe-se diante de seu semblante.

Ugh... Os infratores têm o maior ego. Eles aprenderam a usar a msdn e a ajudar, escreveram mais de 1000 linhas de texto e é isso, sou uma estrela. Ouvi em algum lugar a palavra singleton e XP, é isso, eu conheço os padrões e métodos de programação. Eu sou um maldito designer...

Você deveria se envergonhar, você não é um garoto.


Andrew, por que você não me mostrou o super-programador que você é? O primeiro passo é explicar como você resolveu o problema. Escrevi como resolvi o problema. Agora você me diz. Então analisaremos juntos seus equívocos.

Mais uma vez, não sou um programador. Eu sou melhor do que isso.

===========

A propósito, eu não tenho projetos de menos de 1000 linhas. Normalmente dezenas de vezes mais. Esta classe (base) é de 5110 linhas + 2 2500 linhas cada uma das classes herdadas dela. Isso sem contar com uma dúzia de outros similares utilizados no projeto.

Razão: