Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь стать известным разработчиком? Выполняй заказы трейдеров в сервисе Фриланс!
MetaQuotes Software Corp.
Модератор
180337
MetaQuotes Software Corp. 2012.11.19 17:05 

SharedMemory.dll v4.2.7.0.:

Библиотека для передачи данных между MQL4- и MQL5-программами, терминалами и другими приложениями.

Author: Vadim Zhunko

dj_ymep
75
dj_ymep 2012.11.20 07:06  

 Здравствуйте, спасибо за интересную работу. Но у меня почему-то при попытке что либо записать или прочитать выдаются такие шибки:

 

В чем может быть причина? Посмотрел видео, запускаю все так же. Заранее спасибо. 

Vadim Zhunko
5226
Vadim Zhunko 2012.11.20 07:45  
dj_ymep:

 Здравствуйте, спасибо за интересную работу. Но у меня почему-то при попытке что либо записать или прочитать выдаются такие шибки:

В чем может быть причина? Посмотрел видео, запускаю все так же. Заранее спасибо. 

Спасибо! Разбираюсь. Скорее всего, это связано с идентификацией пользователя. Не догадался проверить на незарегистрированном счёте. У меня-то работает :-)

==================

Исправил. Нет ничего надёжнее параноидальной защиты :-)) Так защитился, что сам её искал в коде час.

Думаю, до конца дня обновят.

dj_ymep
75
dj_ymep 2012.11.20 10:21  
Zhunko:
dj_ymep:

 Здравствуйте, спасибо за интересную работу. Но у меня почему-то при попытке что либо записать или прочитать выдаются такие шибки:

В чем может быть причина? Посмотрел видео, запускаю все так же. Заранее спасибо. 

Спасибо! Разбираюсь. Скорее всего, это связано с идентификацией пользователя. Не догадался проверить на незарегистрированном счёте. У меня-то работает :-)

==================

Исправил. Нет ничего надёжнее параноидальной защиты :-)) Так защитился, что сам её искал в коде час.

Думаю, до конца дня обновят.


Спасибо! проверим.
Vadim Zhunko
5226
Vadim Zhunko 2012.11.20 10:51  
Обновили. Можно скачивать.
dj_ymep
75
dj_ymep 2012.11.20 11:53  
Извиняюсь за наглость))) У вас случайно нет примера для работы с этой библиотекой в C или Delphi?
Vadim Zhunko
5226
Vadim Zhunko 2012.11.20 12:48  
dj_ymep:
Извиняюсь за наглость))) У вас случайно нет примера для работы с этой библиотекой в C или Delphi?

Почему же наглость? Нормальный вопрос.
Для С++ надо: 
1. Файл SharedMemoryMT4.lib.
2. Файл SharedMemoryMT4.h.
3. Примеры такие же, что в MQL4. Они находятся в файле Check_SharedMemoryMT4.dll.mq4.
4. Есть одна особенность для работы со сторонним приложением. Есть недокументированная функция, которая инициализирует библиотеку, как будто она работает с МТ4. Но для незарегистрированных пользователей это не важно.
5. Есть пример тестовый для С++. Тестировал эту библиотеку удалённо из EXE.

Если надо, то вложу в архив или альтернативно можно пообщаться.

dj_ymep
75
dj_ymep 2012.11.20 13:59  

Если не трудно, можно выложить пример? И еще вопрос, библиотека идет с ограничениями для незарегестрированных пользователей?

Vadim Zhunko
5226
Vadim Zhunko 2012.11.20 16:30  
dj_ymep:

Если не трудно, можно выложить пример? И еще вопрос, библиотека идет с ограничениями для незарегестрированных пользователей?

Пример С++, так понимаю? Ограничение на количество имён. На память нет ограничений. Просто удобство такое.

Эта библиотека используется в моём программном комплексе. Такая защита от несанкционированного использования. Комплекс работает со множеством имён. С ограничением работать не будет.

dj_ymep
75
dj_ymep 2012.11.20 16:41  
Zhunko:
dj_ymep:

Если не трудно, можно выложить пример? И еще вопрос, библиотека идет с ограничениями для незарегестрированных пользователей?

Пример С++, так понимаю? Ограничение на количество имён. На память нет ограничений. Просто удобство такое.

Эта библиотека используется в моём программном комплексе. Такая защита от несанкционированного использования. Комплекс работает со множеством имён. С ограничением работать не будет.

  


Да, пример на C++.
Vadim Zhunko
5226
Vadim Zhunko 2012.11.20 18:21  
 void _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  {
   try
    {
     tcout << _T("Создаём отображение с именем \"Test1\".") << ENDL;
     hMapping = ::MemoryCreate(MEMORY_GLOBAL, "", NULL, -1, "Test1", 64000); // Создаём отображение.
     tcout << _T("Системный дескриптор: ") << hMapping << ENDL;
     tcout << _T("Записываем строку \"Привет мир!\".") << ENDL;
     ::MemoryWriteString(MEMORY_GLOBAL, "", -1, "Test1", 4, "Привет мир!");
     tcout << _T("Записываем строку \"Мир привет!\".") << ENDL;
     ::MemoryWriteString(MEMORY_GLOBAL, "", -1, "Test1", 16, "Мир привет!");
     tcout << _T("Читаем строки:") << ENDL;
     tcout << ::MemoryReadString(MEMORY_GLOBAL, "", -1, "Test1", 4, 30) << ENDL;
     tcout << ::MemoryReadString(MEMORY_GLOBAL, "", -1, "Test1", 16, 30) << ENDL;
     tcout << _T("Закрываем файловое отображение по имени \"Test1\": ") << ::MemoryCloseName(MEMORY_GLOBAL, "", "Test1") << ENDL2;
     tcout << _T("Создаём отображение с именем \"Test2\".") << ENDL;
     hMapping = ::MemoryCreate(MEMORY_GLOBAL, "", NULL, -1, "Test2", 64000); // Создаём отображение.
     tcout << _T("Системный дескриптор: ") << hMapping << ENDL;
     tcout << _T("Проецируем отображение с именем \"Test2\": ") << ::MemoryProjectionByHandle(MEMORY_GLOBAL, "", -1, hMapping) << ENDL;
     tcout << _T("Записываем строку \"Привет мир\".") << ENDL;
     ::MemoryWriteString(MEMORY_GLOBAL, "", -1, "Test2", 4, "Привет мир!");
     tcout << _T("Записываем строку \"Мир привет!\".") << ENDL;
     ::MemoryWriteString(MEMORY_GLOBAL, "", -1, "Test2", 16, "Мир привет!");
     tcout << _T("Читаем строки:") << ENDL;
     tcout << ::MemoryReadString(MEMORY_GLOBAL, "", -1, "Test2", 4, 30) << ENDL;
     tcout << ::MemoryReadString(MEMORY_GLOBAL, "", -1, "Test2", 16, 30) << ENDL;
     tcout << _T("Закрываем файловое отображение по имени \"Test2\": ") << ::MemoryCloseName(MEMORY_GLOBAL, "", "Test2") << ENDL2;
     tcout << _T("Создаём и проецируем отображение с именем \"Test3\".") << ENDL;
     hMapping = ::MemoryCreateProjection(MEMORY_GLOBAL, "", NULL, -1, "Test3", 64000); // Создаём отображение.
     tcout << _T("Системный дескриптор: ") << hMapping << ENDL;
     tcout << _T("Записываем строку \"Привет мир!\".") << ENDL;
     ::MemoryWriteString(MEMORY_GLOBAL, "", -1, "Test3", 4, "Привет мир!");
     tcout << _T("Записываем строку \"Мир привет!\".") << ENDL;
     ::MemoryWriteString(MEMORY_GLOBAL, "", -1, "Test3", 4100, "Мир привет!");
     tcout << _T("Читаем строки:") << ENDL;
     tcout << ::MemoryReadString(MEMORY_GLOBAL, "", -1, "Test3", 4, 30) << ENDL;
     tcout << ::MemoryReadString(MEMORY_GLOBAL, "", -1, "Test3", 4100, 30) << ENDL;
     tcout << _T("Закрываем файловое отображение по имени \"Test3\": ") << ::MemoryCloseName(MEMORY_GLOBAL, "", "Test3") << ENDL2;
    }
   catch(tstring &sException)
    {
     Utils::Debugging::MessageBoxStop(_T("SharedMemoryMT4.exe"), sException);
    }
   catch(LPTSTR szException)
    {
     Utils::Debugging::MessageBoxStop(_T("SharedMemoryMT4.exe"), szException);
    }
   catch(PWORD pawException)
    {
     Utils::Debugging::MessageBoxStop(_T("SharedMemoryMT4.exe"), Utils::Protection::DecodingString<tstring>(pawException, 0, 1000));
    }
   catch(...)
    {
     Utils::Debugging::MessageBoxStop(_T("SharedMemoryMT4.exe"), _T("Системная ошибка!") + LAST_ERROR);
    }
   Utils::DeinitPointerCS(); // Очищаем ресурсы.
   tcout << ENDL << _T("ДЛЯ ЗАВЕШЕНИЯ ОТЛАДКИ И ВЫХОДА ИЗ ПРИЛОЖЕНИЯ НАЖМИТЕ \"ENTER\".") << ENDL;
   PAUSE;
  }
Это пример на С++
/ /123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий