Boa tarde
Não consigo me conectar a partir do projeto C++ Builder .
Aqui está o código
void __fastcall TForm1::FormActivate(TObject *Sender) { AnsiString path_MemMap32=ExtractFileDir(ParamStr(0)) + "\\dll\\MemMap32.dll"; AnsiString path_file="Local\\Monitor_USDCHF"; wchar_t * UnicodeString = new wchar_t[path_file.WideCharBufSize()]; path_file.WideChar(UnicodeString,path_file.WideCharBufSize()); delete [] UnicodeString; int (__stdcall *MemOpen) (char * path,int size,int mode,int &err); void (__stdcall *MemClose)(int hmem); int (__stdcall *MemRead)(int hmem, int v[], int pos, int sz, int &err); HINSTANCE hDLL= LoadLibrary(path_MemMap32.c_str()); if(!hDLL) {StatusBar1->SimpleText="I can't load dll";} else {StatusBar1->SimpleText="path_MemMap32.dll load";} MemOpen= (int(__stdcall *)(char * path,int size,int mode,int &err)) GetProcAddress(hDLL,"MemOpen"); MemClose=(void(__stdcall*)(int hmem)) GetProcAddress(hDLL,"MemClose"); MemRead= (int(__stdcall *)(int hmem, int v[], int pos, int sz, int &err)) GetProcAddress(hDLL,"MemRead"); hmem=MemOpen(path_file.c_str(),-1,0,err); StatusBar1->SimpleText=err; }
A barra de status diz 2, ou seja, arquivo não encontrado. Tentei enviar o caminho para o arquivo tanto em ansi quanto em unicode
No arquivo MT5, o Expert Advisor criou um arquivo e atualiza as cotações nele.
Se você tem C++, por que decidiu usar uma DLL?
O código-fonte está totalmente disponível lá.
Se você tem C++, por que decidiu usar uma DLL?
O código-fonte está totalmente disponível.
Eu queria usar uma DLL pronta.
para que não houvesse problemas com o MT4-5.
... Vou tentar ver o código-fonte da dll
Eu queria usar a dll pronta.
para que não houvesse problemas com o sparring no MT4-5.
... Vou tentar ver o código-fonte da dll.
Qual é o seu Windows?
win7x64
Não consigo escrever no builder.
E não consigo escrever assim.
#include <vcl.h> #include <stdafx.h> #include "BuySell.h"Eu entendi.
[C++ Fatal Error] afxv_w32.h(14): F1003 Error directive: WINDOWS.H already included. MFC apps must not #include <windows.h>
Tentei me conectar primeiro
afxv_w32.h
não ajudou
Tentei conectar o afxwin.h primeiro - isso também não ajudou.
Tentei conectar o afxwin.h primeiro, mas isso também não ajudou.
procure o afx.h conectado como outra opção.
Sim, então ele está conectado sem erros, vou continuar tentando. Obrigado.
...
Consegui, tudo funciona.
Mas o CloseHandle não fecha por algum motivo.
Tenho um servidor no exe (cria atualizações e deve fechar) e no terminal há um receptor, portanto, após o CloseHandle no servidor, ele vê o objeto com falha na memória.
Tenho um servidor no eco (ele o atualiza e fecha) e um receptor no terminal, portanto, após o CloseHandle no servidor, ele vê o objeto com falha na memória.
e você espera que a memória seja completamente limpa quando a alça for fechada?
Boa tarde
Por favor, diga-me a direção do desenvolvimento do pensamento.
Há uma tarefa para distribuir sinais em um computador (servidor) em muitos terminais, com atrasos críticos de mais de 1-3 ms.
Implementado em um pacote de cliente-servidor, 1-2 contas funcionam de forma aceitável e não penduram o terminal, fazendo a leitura da memória usando Sleep(1) em um loop - se a memória tiver o valor necessário, execute alguma ação. Mas quando se trata de terminais com até 5 terminais, 1 ms aqui não é possível, caso contrário o cooler do processador começa a uivar...
Não acompanho as notícias há muito tempo. Talvez no mt5 existam eventos personalizados semelhantes ao OnTrade para que possam ser vinculados à modificação da memória.
Tentei ler sem atrasos 100.000 ciclos (8 bytes cada) em 670 ms.
... talvez eu devesse reduzir os dados para 4 bytes.
... provavelmente há outra opção para reconstruir sua dll para fazer um loop interno - não retornando dados até que eles não tenham os valores necessários. mas como o MT5 reagirá a uma espera tão longa pelo retorno de uma função externa é outra questão.
Há uma tarefa para distribuir sinais em um computador (servidor) para muitos terminais; atrasos de mais de 1-3 ms são críticos.
Implementado no pacote cliente-servidor, 1-2 contas funcionam de forma aceitável e não penduram o terminal feito com a leitura da memória usando Sleep(1) em um loop - se a memória tiver o valor necessário, executamos alguma ação. Mas quando se trata de terminais, mesmo 5 terminais, 1 ms aqui não é possível, caso contrário o cooler do processador começa a uivar...
Não acompanho as notícias há muito tempo. Talvez no mt5 existam eventos de usuário semelhantes ao OnTrade, de modo que possam ser vinculados à modificação da memória.
No seu caso, somente o servidor tem o direito de modificar a memória. Os clientes a leem.
- Observe a direção do Pipe. Lá, os "eventos" de chegada de dados são realizados de forma autoexplicativa - se houver dados, nós os pegamos; se não, esperamos.
Sim, o servidor terá que ser escrito ou copiado do MSDN, mas os clientes prontos podem ser usados diretamente na MQL5.
Infelizmente, também não há como lidar com a periodicidade da sondagem aqui. O Sleep(1) em um número tão grande de Expert Advisors não deve fazer barulho, mesmo quando se trabalha com memória. Você precisa verificar o tempo das funções, talvez haja passagens extras e carga em algum lugar.
- 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
Monitoramento de Cotações (arquivo de memória mapeada):
Este Expert Advisor é um exemplo de uso do Mapeamento de Memória DLL para trabalhar com Funções de Mapeamento de arquivo.
Neste exemplo, o Expert Advisor cria um arquivo virtual (de memória mapeada) e inicia a atualização das cotações nos ativos. Desta forma, os Expert Advisors podem trocar dados (por exemplo, dados de cotações) usando o arquivo de memória mapeada comum.
Autor: o_O