| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Прямой доступ в память |
| Автор: Micher 5.10.2008, 13:55 |
| Привет всем! Такой вопрос: Можно ли в делфи - работать с памятью на прямую? Мне нужно написать DLL, посредством которой 2 программы связывались бы(Они не на делфи). Например одна программа чтото пишет в определённый участок памяти, другая читает и в зависимости от того, что туда записала первая, совершает определённые действия. Версия с "общением" программ посредством файла приводить не стоит, так как очень(!) важна скорость работы. Покопав предварительно в инете, нашёл 1 более менее интересную ссылку на форум по той же теме, но честно говоря, просто напросто запутался. http://forum.shelek.ru/index.php/topic,7579.0.html Может, кто-нибудь знает, как лучше сделать или даже имел опыт в написании подобного кода... Заранее спасибо |
| Автор: Alexeis 5.10.2008, 14:08 |
| Micher, Да по ссылке как раз то что нужно. Еще можно при помощи WriteProcessMemory. Предварительно открыв при помощи OpenProcess. Поищите в разделе "Delphi: WinAPI и системное программирование" |
| Автор: Alexeis 5.10.2008, 14:41 |
| ne0n, Все правильно выделил участок памяти, передал его адрес процессу, который должен в него записать, и тот в свою очередь запишет в него. Добавлено через 49 секунд Нужно будет еще семафоров сделать, чтобы синхронизировать доступ к общей памяти |
| Автор: Micher 5.10.2008, 21:13 | ||
А что конкретно то, что нужно? |
| Автор: Micher 5.10.2008, 21:29 | ||
http://rouse.drkb.ru/winapi.php#mmf - к сожалению, нерабочая ссылка. По поводу сообщений написано следующее: "Есть одно условие - приложение должно содержать окно". Моё приложение содержит окно(т.е. не просто висит где-то в памяти и чото тихо делает В общем, я что-то совсем запутался |
| Автор: Alexeis 5.10.2008, 21:43 | ||
А насколько важен момент передачи? С какой точностью требуется синхронизация приложений. Для таких простых целей думаю хватит простого и стандартного механизма WM_COPYDATA |
| Автор: Micher 5.10.2008, 21:55 | ||||
2 приложения получают данные извне. Эти данные могут приходить очень по-разному: от нескольких раз в секунду до 1 раза в 3-5 секунд. Получив данные, 1 приложение должно обработать их и отослать информацию 2-му приложению(и наоборот)... по мере получения данных извне(т.е. если данные не поступают, то приложение не делает ничего). |
| Автор: Micher 6.10.2008, 14:33 | ||||
С отправлением сообщений вроде разобрался, делаю так примерно:
Теперь не понятно, как ПРИНЯТЬ из другого приложения то, что посылает ему первое :-( Нашёл такой примерно кусочек кода:
Но мне нужна функция(она не должна быть методом какого-либо класса), которая просто вернёт строку - которую посылается 1-м приложением... |
| Автор: Alexeis 6.10.2008, 16:33 | ||
Добавь в case функции главного окна WM_COPYDATA и напиши обработку. |
| Автор: Micher 6.10.2008, 16:38 | ||||
Честно говоря не очень понял вашу мысль |
| Автор: Alexeis 7.10.2008, 18:17 |
На вид правильный. Если модуль написан на WinApi то должна быть главная функция обработчик сообщений в ней и будет происходить обработка. |