Originally Posted by
;
Вы не сможете создать пространство общей памяти непосредственно внутри DLL. Есть несколько способов заставить DLL общаться друг с другом. На самом деле это зависит от того, хотите ли вы использовать двухсторонние комиксы или нет, и как часто им нужно общаться. Простейшие методы включают в себя: 1) Открыть сокеты внутри DLL для общения через TCP или другой протокол. (вероятно, самый простой и работает, если приложения MT4 находятся на разных машинах в локальной сети или через inet) 2) Пусть один MT4 использует DLL, которая создает «вспомогательное» окно (видимое или невидимое), а затем реализует сообщения WM_COPYDATA с помощью SendMessage либо непосредственно из MT4, либо из другой DLL. Если это не для вас, вы можете использовать дисковые файлы для передачи данных, если вы не передаете слишком часто, вам просто нужно использовать вспомогательные файлы в качестве механизма семафоров. Опять же, это действительно зависит от того, как вы пытаетесь общаться, но это должно работать внутри советника (а не внутри). (Однако вам придется использовать файловые функции Windows API, потому что, насколько я знаю, MT4 не будет писать или читать вне своей собственной структуры каталогов) «Datafile.txt» содержит ваши данные «app1lock.txt» ... файл-пустышка блокировки » app2lock.txt '... фиктивный файл блокировки перед запуском любого из приложений MT4, убедитесь, что файлов нет. App1 ... если app2lock.txt не существует {создать файл app1lock.txt//на этом этапе возможно, что оба приложения заблокированы почти одновременно подожди и проверь снова сон (1000);/подождать секунду, если app2lock.txt не существует {создатьизменитьпрочитать 'datafile.txt'}, иначе флаг, который нам нужно будет повторить в следующий раз через файл удаления ”app1lock.txt”} App2 ... если app1lock.txt делает не существует {создать файл app2lock.txt Sleep (1500), если app1lock.txt не существует {создатьизменитьпрочитать 'datafile.txt'}, иначе флаг для следующего запуска через файл удаления ”app2lock.txt”}