Quanto à questão do long - você pode, mas não é necessário, se usar o int como receptor de 4 bytes de algo assim a partir de uma matriz de caracteres. (ou seja, você passa exatamente pelo ponteiro &).
Como descobrir - aqui você pode http://forum.ixbt.com/topic.cgi?id=26:37968
Quanto à questão do long, você pode, mas não é necessário, se usar o int como receptor de 4 bytes de algo parecido a partir de uma matriz de caracteres. (ou seja, você passa exatamente pelo ponteiro &).
Como descobrir - aqui pode ser http://forum.ixbt.com/topic.cgi?id=26:37968
Você pode esclarecer algo sobre o tempo de troca nessa estrutura (por exemplo, para 10 números de formato Int)?
Esclareça a pergunta.
Você está perguntando sobre a velocidade do memcpy? Acho que essa é uma pergunta criativa relacionada mais ao trabalho de uma biblioteca wind do que ao mql.
Boa tarde. Apesar do fato de o artigo ter sido escrito há relativamente muito tempo, a questão da troca de dados com dlls de biblioteca ainda é relevante. Recentemente, eu mesmo me deparei com a necessidade de implementar uma determinada funcionalidade e tive uma escolha: escrever minha própria dll ou ainda tentar usar dlls de biblioteca. Optei pela segunda opção e, naturalmente, enfrentei a dificuldade de transferir estruturas e obter dados de volta. Depois de ler este artigo, não entendi muito bem alguns dos pontos, que, em minha opinião, são muito complicados. Nesse artigo, ao transferir uma estrutura para um ambiente externo, é sugerido o uso de uma matriz como uma área de memória alocada na qual a função da biblioteca colocará o resultado e que precisaremos converter para o trabalho posterior. Tenho muito pouca experiência nessa área e talvez meu raciocínio pareça amador, mas mesmo assim expressarei minha opinião na esperança de que pessoas inteligentes me corrijam. Vamos considerar um exemplo simples mencionado em um artigo antigo https://www.mql5.com/pt/articles/1543.
Esse artigo trata da questão da pesquisa de arquivos por meio de dlls de biblioteca. Ele também sugere passar um ponteiro para uma matriz do tamanho necessário e, em seguida, extrair os dados necessários dessa matriz.
O que é uma estrutura? É a mesma seção de memória. Agora vamos tentar mudar a abordagem para passar estruturas e recuperar dados:
// Declare as definições de tipo de dados #define DWORD int #define TCHAR short // Definir esse tipo, pois trabalharemos com unicode #define MAX_PATH (260) // Declare a estrutura FILETIME struct FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; }; // Declarar a estrutura de dados dos resultados da pesquisa struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; }; // Ao declarar os tipos de dados, copiamos as estruturas WinAPI sem nenhuma alteração // Importar função de biblioteca #import "kernel32.dll" int FindFirstFileW(string path, _WIN32_FIND_DATA& answer); #import //+------------------------------------------------------------------+ //| Função de inicialização de especialista| //+------------------------------------------------------------------+ int OnInit() { // Criar uma variável com o tipo da estrutura criada anteriormente _WIN32_FIND_DATA data; // Chame a função da biblioteca, passando um ponteiro para nossa estrutura e, de fato, para a memória alocada int handle = FindFirstFileW(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Experts\\*.mq5", data); if(handle!=-1) { // Visualize o resultado da pesquisa acessando os campos de nossa estrutura sem conversão adicional Print("Nome do arquivo encontrado: ", ShortArrayToString(data.cFileName)); Print("Nome do arquivo temporário encontrado: ", ShortArrayToString(data.cAlternateFileName)); Print("Tamanho do arquivo encontrado: ", data.nFileSizeLow); } //--- return(INIT_SUCCEEDED); } //+-
- 2008.07.15
- MetaQuotes Software Corp.
- www.mql5.com
Em essência, o que é uma estrutura? É a mesma seção de memória. Agora vamos tentar mudar a abordagem para passar estruturas e recuperar dados:
Colei seu código corretamente no editor
Colei seu código corretamente no editor
Muito obrigado! Ainda não descobri como formatar o código corretamente aqui. (((
Muito obrigado! Eu ainda não descobri como codificar corretamente aqui. (((
Como inserir o código.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Eliminação de DLLs autogeradas foi publicado:
Se a linguagem MQL5 funcional não é suficiente para o cumprimento de tarefas, um programador MQL5 tem que usar ferramentas adicionais. Ele \ ela tem que passar para outra linguagem de programação e criar uma DLL intermediária. O MQL5 tenha a possibilidade de apresentar vários tipos de dados e transferí-los à API mas, infelizmente o MQL5 não pode resolver a questão levando em consideração a extração de dados do ponteiro aceito. Neste artigo vamos pontuar todos os "i"s e mostrar mecanismos simples de transferência e trabalho tipos complexos de dados.
Autor: o_O