- Когда веб-терминал незаменим
- MetaTrader Market – крупнейший магазин торговых приложений
- Торговые роботы и технические индикаторы в MetaTrader 5
Советник падает с ошибкой "Access violation at 0x000007FEFD377FD9 read to 0x0000000100000008" при вызове WinAPI. В то же время, проблема на 880 билде не воспроизводится. Подробности в сервис деске. Но там что то реакции никакой не могу дождаться. :(
у меня Win7 х64. Терминал соответственно тоже х64
объявление
#define PIPE_ACCESS_DUPLEX 3 #define PIPE_TYPE_MESSAGE 4 #define PIPE_READMODE_MESSAGE 2 #define PIPE_NOWAIT 1 #define PIPE_UNLIMITED_INSTANCES 255 #import "kernel32.dll" int CreateNamedPipeW(string pipeName, int openMode, int pipeMode,int maxInstances,int outBufferSize,int inBufferSize,int defaultTimeOut,int security); int CloseHandle(int fileHandle); int PeekNamedPipe(int PipeHandle, int PassAsZero, int PassAsZero2, int PassAsZero3, int &BytesAvailable, int PassAsZero4); int ReadFile(int FileHandle, string &buffer, int BufferLength, int &BytesRead, int PassAsZero); #import
вызов
int CreatePipeInstance() { int openMode = PIPE_ACCESS_DUPLEX; int pipeMode = PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT; return (CreateNamedPipeW(pipeName, openMode, pipeMode, PIPE_UNLIMITED_INSTANCES, 1000, 1000, 0, 0)); }
Фишка в том, что когда её вызываю без использования ООП всё работает.
Последовательность действий
Эксперимент 1:
-открываем 2 графика
-на 1 кидаем Sender
-на 2 кидаем Test
Эксперимент 2:
-открываем 2 графика
-на 1 кидаем Sender
-на 2 кидаем Host
Полученный результат
Эксперимент 1:
Sender отправляет, а Test - принимает сообщения
Эксперимент 2:
Host - падает с ошибкой "Access violation at 0x000007FEFD377FD9 read to 0x0000000100000008"
во время вызова функции CreateNamedPipeW.Вот правильное объявление функций для 64-разрядного терминала:
#define PVOID ulong #define HANDLE PVOID #import "kernel32.dll" HANDLE CreateNamedPipeW( string pipeName, uint openMode, uint pipeMode, uint maxInstances, uint outBufferSize, uint inBufferSize, uint defaultTimeOut, PVOID security ); int CloseHandle( HANDLE hObject ); int PeekNamedPipe( HANDLE hNamedPipe, PVOID lpBuffer, uint nBufferSize, PVOID lpBytesRead, uint& lpTotalBytesAvail, PVOID lpBytesLeftThisMessage ); int ReadFile( HANDLE hFile, uchar& lpBuffer[], uint nNumberOfBytesToRead, uint& lpNumberOfBytesRead, PVOID lpOverlapped ); #import
Советник падает с ошибкой "Access violation at 0x000007FEFD377FD9 read to 0x0000000100000008" при вызове WinAPI. В то же время, проблема на 880 билде не воспроизводится. Подробности в сервис деске. Но там что то реакции никакой не могу дождаться. :(
Зачем Вы создаёте столько именованных каналов? Насколько я понимаю нужно создать один канал.
Вот правильное объявление функций для 64-разрядного терминала:
Удивительно. На моей памяти, уже не первый раз в трудный момент здесь появляется "злой колдун", дает точный ответ и без лишних слов тихо растворяется в ночи.
Вот он, эффективный советчик. И рейтинг всего-то...!
Сдается мне что не злой он вовсе, а "добрый фрактал"... ))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования