IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
Обмен данными между двумя приложениями DBP через реестр и память
Лёня
сообщение 21.8.2013, 7:44
Сообщение #1


Активный участник
***

Группа: Пользователи
Сообщений: 107
Регистрация: 24.1.2011
Из: Балашиха
Пользователь №: 65676



Мне бы ещё хотелось картинки через буфер обмена протаскивать...

Пишет:

Код
sync on
cls
sync
sync

a as byte
a=0

rid = FIND FREE BANK()
MAP SHARED MEM TO BANK "100", rid, 1024

print "rid: "; rid

write to registry "SOFTWARE\DBPprov","ptr",rid
print "REGISTRY: "; get registry("SOFTWARE\DBPprov","ptr")

do

    WRITE BANK BYTE rid, 1, a
    print "a: "; a

    print "Press a key..."
    sync
    wait key

    a=a+12
    if a=252 then exit

loop


Считывает:

Код
sync on
cls
sync
sync

rid=get registry("SOFTWARE\DBPprov","ptr")

print "REGISTRY: "; rid
sync

MAP SHARED MEM TO BANK "100", rid, 1024

do

    dat = BANK BYTE(rid, 1)

    print "dat: "; dat
    print "Press a key..."
    sync
    wait key

loop


Да, надо подгрузить в папку с ДБП привёртку одну, Matrix1_utility называется, и ещё в папку с этими исполняемыми программами msvcr71.dll (или в папку Windows\system32).
Прикрепленные файлы
Прикрепленный файл  screenshot.jpg ( 97,21 килобайт ) Кол-во скачиваний: 8
 
Перейти в начало страницы
 
+Цитировать сообщение
Agny
сообщение 21.8.2013, 14:24
Сообщение #2


Активный участник
***

Группа: Пользователи
Сообщений: 267
Регистрация: 10.1.2013
Из: Kazahstan,Pavlodar
Пользователь №: 65718



Обычно если идет обмен данными между двумя приложениями в реальном времени через тот же буфер обмена, то они должны быть синхронизированы, иначе может ошибка быть.

Я помню в свое время использовал такой метод. Но что бы синхронизировать работу двух приложений. Я сделал условный "сигнал" для передачи данных. К примеру первая программа записывает значение в буфер обмена и ждет разрешение на запись следующего значения. Вторая программа считывает и после считывания, вписывает буфер обмена условную команду (к примеру: "-1"). Это будет разрешением на запись следующего значения для первой программы. И т.д.

Работало всё без сбоев.
Перейти в начало страницы
 
+Цитировать сообщение
Лёня
сообщение 21.8.2013, 16:34
Сообщение #3


Активный участник
***

Группа: Пользователи
Сообщений: 107
Регистрация: 24.1.2011
Из: Балашиха
Пользователь №: 65676



Буфер лучше не засорять; к тому же, он мне нужен в моей программе для вставки текстов из текстовых программ. А тут у них на www.thegamecreators.com я нашёл способ использовать "общую память" (Shared memory). Но тут надо быть осторожным: возможно, что нельзя использовать "банки" свыше 4КБ, так как можно напортачить в оперативной памяти.
Перейти в начало страницы
 
+Цитировать сообщение
Kolyanoid
сообщение 22.8.2013, 4:00
Сообщение #4


. . .-= SPK Games =-. . . Модератор v3.2 alpha . . Linuxoid v0.5
***

Группа: Администраторы
Сообщений: 3521
Регистрация: 1.9.2004
Из: Москва
Пользователь №: 15



Вот на этом я собаку съел, когда делал 3Dбраузер.

Сразу могу сказать - самый простой и одновременно надежный способ передавать данные - это через реестр. Это стабильно, это быстро, это без сбоев.

Буфер обмена использовать не рекомендую, т.к. юзеру буфер может понадобиться, а при работающей проге он может бажить.
Кроме того, когда 3Dбраузер работал через буфер, он был написан да ДБк, совершенно случайно и произвольно выскакивала сообщение о невозможности открыть буфер обмена и все, естественно, накрывалось.

Есть и более замороченные способы, как родные виндовые, так и кросс-платформенные (например, dbus)


--------------------
Мои координаты:
  • Jabber: kolyanoid@jabber.ru
  • Почта: kolyanoid [at] mail333.com
  • Вконтакте: id64896
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен». (Альберт Эйнштейн)
Перейти в начало страницы
 
+Цитировать сообщение
Лёня
сообщение 23.8.2013, 18:15
Сообщение #5


Активный участник
***

Группа: Пользователи
Сообщений: 107
Регистрация: 24.1.2011
Из: Балашиха
Пользователь №: 65676



Погонял на предельных скоростях в течении нескольких часов Общую память (Shared Memory) - не посыпалось. Даже реестр не использовал! happy.gif

Получать картинки через Буфер Обмена тоже на Креаторсах научили.
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19.11.2017, 2:25
 X 
Ссылки на работы форумчан:
1. Cайт по использованию 3D технологий
в образовании

2. 15 Defense. Underwater Battle

3. GlaZ в Steam Greenlight