Erros, bugs, perguntas - página 2577
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
Eu conheço essa opção.
Depois divisão por zero.
Depois divisão por zero.
Ng....havia esperança, mas como sempre apenas hardcore ))))
ZS: talvez não mexer em cordas? salvar arrays em wchar_t e correr com eles, e dentro do µl converter em cordas se necessário https://www.mql5.com/ru/docs/convert/shortarraytostring
Acordado
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
WinAPI -> MQL5 x64
A100, 2018.05.29 14:11
Toda a regra já foi dita. Se quiser que funcione sempre - precisa de usar o ushort, e se quiser compreender porque é que o string deixa subitamente de funcionar (o que funcionou ontem) - pode usar o string
aqui está a sair dos limites
Deu-me a ideia de verificar o comprimento da corda inicializada em StringInit(out, 165, 32);
A ajuda do StringInit diz que o segundo parâmetro é o comprimento da corda, o comprimento da corda no meu entendimento é o número de caracteres da corda.
No meu caso, a cadeia de entrada tem 164 caracteres, por isso coloquei 165 no segundo parâmetro, e tentei mais de *2, 330.
Usandomemcpy_s com um ponteiro,
O resultado foi o mesmo, o fim da corda sempre se desvia pelo número de caracteres, e há fugas quando se analisa.
Sem um ponteiro, a corda também flutua.
Mas deu-me uma ideia e em StringInit(out, 1400, 32) defini o tamanho do ponteiro em bytes, não o comprimento da corda.
E voilá milagre, a corda tornou-se sem caracteres de saída extra, sem problemas de análise, e sem uma única fuga.
Quero notar que é com o ponteiro em tamanho de, sem o ponteiro o fio flutua.
Isto levanta uma questão aos criadores, a ajuda no StringInit é correcta ????
Não está misturado, na ajuda ou na própria função StringInit, o comprimento da corda com o tamanho da corda?
Em geral agora, se usar memcpy, funciona correctamente se passar o tamanho do ponteiro e StringInit é inicializado com este tamanho, não com o comprimento!
Acordado
Sim, eu também concordo. Mas nem sempre é conveniente usar a corda como uma matriz, especialmente quando esta precisa de ser passada através de várias funções.
Os apontadores são mais convenientes neste caso, não é necessário voltar a preencher esta matriz em cada função de trânsito e, além disso, introduzir mais um parâmetro para a matriz, o seu tamanho.
Assim, simplesmente atribuiu um buffer que é deliberadamente sobredimensionado (empurrou para trás o limite) e o erro simplesmente não aparece - porque estava no limite
Também pensei assim, o comprimento do cordel é de 164, conjunto 165, conjunto 330.
330 não é claramente um limite de comprimento de cordas, se contarmos as cordas em caracteres.
Acontece que não é o comprimento, mas o tamanho dos bytes.
Mas a ajuda sugere o oposto, que deveria ser o comprimento emStringInit.
Em geral, como entendi, o tipo de corda do mql é um ponteiro e deve-se manusear este tipo como um ponteiro.
O zero está presente
Se insiste, que seja à sua maneira.
Também pensei assim. O comprimento do cordel era de 164, eu fixei-o em 165 e depois em 330.
330 não é obviamente um limite de comprimento de corda se contarmos as cordas em caracteres.
Acontece que não é o comprimento, mas o tamanho dos bytes.
Mas a ajuda sugere o oposto, que deveria ser o comprimento em StringInit.
Em geral, como eu entendi, o tipo de corda do mql é um ponteiro e deve-se lidar com este tipo como um ponteiro.
A corda do tipo mql é uma estrutura que contém um ponteiro, o comprimento da corda e possivelmente outra coisa qualquer.
Quando se passa um fio à DLL, apenas o ponteiro é passado. O comprimento da corda deve ser passado manualmente.
E certifique-se sempre de não sobredimensionar a corda.
Todas as alterações no tamanho das cordas estão apenas no lado do MQL.
No lado da DLL, deve ler atentamente a ajuda para as funções que utiliza. Este é o único problema que tem.
sizeof( wchar_t* ) devolve o tamanho do ponteiro. Não é nada disso que precisa.
A corda do tipo mql é uma estrutura que contém um ponteiro, o comprimento da corda e possivelmente outra coisa qualquer.
Quando se passa um fio à DLL, apenas o ponteiro é passado. O comprimento da corda deve ser passado manualmente.
E certifique-se sempre de não sobredimensionar a corda.
Todas as alterações no tamanho das cordas estão apenas no lado do MQL.
No lado da DLL, deve ler atentamente a ajuda para as funções que utiliza. Este é o único problema que tem.
sizeof( wchar_t* ) devolve o tamanho do ponteiro. Isto não é de todo o que precisa.
Certo, atribuo um amortecedor para o cordão, e inicializo-o com espaços.
Depois passo esta string (ponteiro) para dll.
Em dll, os dados wchar_t* são copiados para fora, ou seja, também um ponteiro. Logicamente, não deverá haver problemas.
Tal como o entendo de acordo com a ajuda, a função StringInit deve definir o comprimento da corda.
Mas ainda tenho alguns problemas com a própriafunção StringInit; especifiquei o comprimento da corda e fiquei esquisito quando apontei para o tamanho do ponteiro.
Não percebo a que comprimento de corda manual se refere.
E se usar sizeof(wchar_t) sem um ponteiro, a corda começa a flutuar com caracteres extra, o que causa problemas com a análise e vazamento.
Para passar as cordas para dll usei o exemplo de Renat, do seu artigo sobre como escrever uma dll.
Mas por alguma razão, se eu o passar sem ponteiro sizeof(wchar_t), o fio flutua, enquanto com o ponteiro sizeof(wchar_t*) não há problema.
Parece-me lógico, estou a copiar um fio como apontador, o tamanho deve ser passado para o apontador e não para o tipo.