Na MQL5 há sempre espaço para uma exploração! ;) - página 5

 
sergeev:

Não me parece. Não se pode empurrar megabytes de informação através de OBJ_TEXT.

o candidato mais próximo são os recursos

Nota: um ponto é na realidade uma estrutura repleta de variáveis de diferentes tipos. É guardado quando se fecha/abre o terminal e também é guardado num modelo.

 
DC2008:

Nota: um ponto é na realidade uma estrutura repleta de variáveis de diferentes tipos. É guardado quando se fecha/abre o terminal e também é guardado no modelo.

?
 
sergeev:

Continuo a perguntar: já encontrou uma solução para a DLL 32/64?

Há uma espécie de WOW32reg.exe no sistema (\System32). Andei de um lado para o outro, não responde a -h -?, não consegui registar nada cegamente.

O Google também é silencioso, não consegui encontrar nada em microsoft.com... por isso é muito fixe.

 
sergeev:
?

O que não está claro? Dê-me uma tarefa concreta, mas é tudo uma rotunda...?

 
MetaDriver:

Continuo a perguntar: já encontrou uma solução para a DLL 32/64?

Há uma espécie de WOW32reg.exe no sistema (\System32). Andei de um lado para o outro, não responde a -h -?, não consegui registar nada cegamente.

O Google também é silencioso, não consegui encontrar nada em microsoft.com... em geral, é agudo.

Portanto, apenas uma ideia, eu próprio ainda não a experimentei. Após detectar a profundidade do bit do terminal, utilizar LoadLibrary para carregar dinamicamente a DLL.

 
MetaDriver:

Continuo a perguntar se já encontrou uma solução para a DLL 32/64 ?

Qual é o problema aqui?

Na importação especificam-se duas funções idênticas, apenas com parâmetros diferentes (int/long). No programa, dependendo do bit 32/64, chama-se a função correspondente.

 
MetaDriver:

Continuo a perguntar se já encontrou uma solução para a DLL 32/64 ?

O código para chamar funções a partir do Windows (ao passar apontadores para eles) - consegui-o.

Graças ao contexto :: tudo é resolvido de forma limpa.


Yurique:

Na importação especificam-se duas funções idênticas, apenas com parâmetros diferentes (int/long). No programa, dependendo do bit 32/64, chama-se a função correspondente.


Por exemplo, como este:

#import "MemMap32.dll"
int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import "MemMap64.dll"
int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import

// переопределяем вызовы для контроля битности
int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if (_IsX64) return(MemMap64::MemRead(h, v, pos, sz, error)); return(MemMap32::MemRead((HANDLE32)h, v, pos, sz, error));  }
num código que se chama com contexto explícito ::.

::MemRead(...)


Ou seja, não multiplicamos nomes de funções, mas fazemos a autodetecção da taxa de bits e chamamos a correcta importada.

 
MetaDriver:

Continuo a pensar, já encontrou uma solução para 32/64 DLL?

A maneira mais fácil é colocar DLLs x32 e x64 do mesmo nome em diferentes directórios de sistemas Windows - SysWOW64 e System32, respectivamente.

Mas o intercâmbio de dados entre programas é realmente um problema, especialmente se o abordarmos de forma aleatória.
Assim, provavelmente raciocinadas e a Microsoft, quando nos anos noventa do século passado, passou de um ficheiro, troca de fluxo para objecto - OLE a partir dele para ActiveX -> COM -> COM + -> .NET, ou seja, com base numa tecnologia de troca inter-programas, criaram um novo sistema de programação e execução de código.

 
Yurich:

Qual é o problema aqui?

Na importação especificam-se duas funções idênticas, apenas com parâmetros diferentes (int/long). No programa, chama-se a função apropriada, dependendo do tamanho do bit 32/64.

Não quer carregar o de 32 bits, e não quer executar o programa mesmo que eu não lhe vá chamar já (o dll).

Se"Allow use of DLL" estiver desmarcado, o botão [OK] não é de todo exibido, apenas cancelado. Permitir, clicar OK - o programa trava. Bloqueio.

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


Idealmente, gostaria de poder chamar a dll32 no terminal x64. Sei com certeza que é teoricamente possível, mas não sei como.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver:

Não quer carregar o de 32 bits, e não quer executar o programa mesmo que eu já não lhe vá chamar (dll).

Quando"Allow dll" estiver desmarcado, o botão [OK] não é de todo exibido, apenas cancelado. Permitir, clicar OK - o programa trava. Bloqueio.


Idealmente, gostaria de poder chamar a dll32 no terminal x64. Sei com certeza que é teoricamente possível, mas não sei como.

Acabei de o verificar:
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
A biblioteca não está carregada, mas tudo funciona até a sua função ser chamada (saída TEST);

Agora chamamos função a essa biblioteca:
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version