![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Micher |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
Привет всем! Такой вопрос:
Можно ли в делфи - работать с памятью на прямую? Мне нужно написать DLL, посредством которой 2 программы связывались бы(Они не на делфи). Например одна программа чтото пишет в определённый участок памяти, другая читает и в зависимости от того, что туда записала первая, совершает определённые действия. Версия с "общением" программ посредством файла приводить не стоит, так как очень(!) важна скорость работы. Покопав предварительно в инете, нашёл 1 более менее интересную ссылку на форум по той же теме, но честно говоря, просто напросто запутался. http://forum.shelek.ru/index.php/topic,7579.0.html Может, кто-нибудь знает, как лучше сделать или даже имел опыт в написании подобного кода... Заранее спасибо |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Micher, Да по ссылке как раз то что нужно.
Еще можно при помощи WriteProcessMemory. Предварительно открыв при помощи OpenProcess. Поищите в разделе "Delphi: WinAPI и системное программирование" -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ne0n |
|
|||
|
PlayBoy ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 5.8.2005 Где: Н.Новгород Репутация: 1 Всего: 11 |
Micher, никто тебе не даст рабоать с памятью напрямую....да и не нужно это)
если количество передаваеммых данных невилико - то можно воспользоваться сообщениями(там размер буфера ограничен, точно не помню сколько) или как уже писали на форуме, на который ты дал ссылку воспользоваться можно MMF. сообщения:http://www.delphisources.ru/pages/faq/base/wm_cd_link.html MMF ( демо от Rousе_): http://rouse.drkb.ru/winapi.php#mmf Добавлено @ 14:26
Alexeis, а поделись информацией, как ?! Это сообщение отредактировал(а) ne0n - 5.10.2008, 14:28 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
ne0n, Все правильно выделил участок памяти, передал его адрес процессу, который должен в него записать, и тот в свою очередь запишет в него.
Добавлено через 49 секунд Нужно будет еще семафоров сделать, чтобы синхронизировать доступ к общей памяти -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Micher |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
А что конкретно то, что нужно? |
|||
|
||||
| Micher |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
http://rouse.drkb.ru/winapi.php#mmf - к сожалению, нерабочая ссылка. По поводу сообщений написано следующее: "Есть одно условие - приложение должно содержать окно". Моё приложение содержит окно(т.е. не просто висит где-то в памяти и чото тихо делает В общем, я что-то совсем запутался |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
А насколько важен момент передачи? С какой точностью требуется синхронизация приложений. Для таких простых целей думаю хватит простого и стандартного механизма WM_COPYDATA -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Micher |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
2 приложения получают данные извне. Эти данные могут приходить очень по-разному: от нескольких раз в секунду до 1 раза в 3-5 секунд. Получив данные, 1 приложение должно обработать их и отослать информацию 2-му приложению(и наоборот)... по мере получения данных извне(т.е. если данные не поступают, то приложение не делает ничего). |
|||
|
||||
| Micher |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
С отправлением сообщений вроде разобрался, делаю так примерно:
Теперь не понятно, как ПРИНЯТЬ из другого приложения то, что посылает ему первое :-( Нашёл такой примерно кусочек кода:
Но мне нужна функция(она не должна быть методом какого-либо класса), которая просто вернёт строку - которую посылается 1-м приложением... |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Добавь в case функции главного окна WM_COPYDATA и напиши обработку. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Micher |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.1.2006 Где: г. Ижевск Репутация: нет Всего: нет |
Честно говоря не очень понял вашу мысль |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
На вид правильный. Если модуль написан на WinApi то должна быть главная функция обработчик сообщений в ней и будет происходить обработка. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |