Название: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 11:55 Я хочу написать, что-то наподобии моста (мостом будет bridg.dll). Мой код:
Код: @ Что я делаю не так? Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: Igors от Апрель 03, 2012, 12:31 Код: ISharedObject *obj = (ISharedObject*)sm.data(); //<--- локальная sharedmemory возвращает невалидный(другой!!, но не NULL) поинтер Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 12:41 lock и unlock это ясно, просто это тестовый пример. Но дело в том, что когда я вызываю метод set(42) идет краш (т.е как я понял указатель не тот).
Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: Igors от Апрель 03, 2012, 13:04 lock и unlock это ясно, просто это тестовый пример. Но дело в том, что когда я вызываю метод set(42) идет краш (т.е как я понял указатель не тот). А тут наблюдается "ляпсус манус". Создали локальный QSharedMemory, замапились, вернули адрес. Конечно деструктор его размапит, он и будет невалидный когда выйдет из getSharedObjectНазвание: Re: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 13:32 Кхм.. вообщето я хотел чтобы этот локальный QSharedMemory обьект, просто получал адресс указателя. Это понятно что в деструкторе у него детач. Но как тогда сделать, чтобы например 2 приложения получали по одинаковому ключу один поинтер?
Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: Igors от Апрель 03, 2012, 14:37 Кхм.. вообщето я хотел чтобы этот локальный QSharedMemory обьект, просто получал адресс указателя. Это понятно что в деструкторе у него детач. Но как тогда сделать, чтобы например 2 приложения получали по одинаковому ключу один поинтер? "2 приложения" имеют 2 разных адресных пр-ва и передавать pointer нет смысла. Если же 2 модудя (dll), то делайте один (глобальный) QSharedMemory и замапленный адрес уже раздавайте кому надо. А так Вы как бы "начинаете еще одну сессию маппинга" (уже с новым адресом).Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 15:06 Про адресные права понял. А как сделать QSharedMemory глобально?) Очнь прошу маленький примерчик.
п.с. вообще хочу реализовать связь winapi dll с qt приложением. Хотел через промежуточную dll к которой прилинкован qtcore (чтобы отделить qt и winapi). Вообще буду ооочень признателен за пример, ибо qt пример убог. п.с.с. Заранее, сокеты не подходят. п.с.с.с. Вообще обычная строка прокидываеться, но возможно ли прокинуть обьект? Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: Igors от Апрель 03, 2012, 15:46 Схемка такая (псевдокод)
Код Пользователь получает через acquire, читает/пишет, потом обязан сделать release но возможно ли прокинуть обьект? В общем случае нет, нужен код объекта на обеих сторонах. Но Вы можете слить его (сериализовать) в shared память и прочитать на приемной стороне. Здесь правда понадобятся семафоры (чтобы узнать когда объект готов)Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 16:28 Если чесно я не совсем понял чем Ваш пример отличаеться от моего), можно пожалуйста поподробней.
п.с. Возможно я лезу в дебри, и есть какой-то другой вариант? Но не сокеты! Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: V1KT0P от Апрель 03, 2012, 16:36 Если чесно я не совсем понял чем Ваш пример отличаеться от моего), можно пожалуйста поподробней. Есть еще pipe. Но это типа сокетов.п.с. Возможно я лезу в дебри, и есть какой-то другой вариант? Но не сокеты! добавлено: Вот почитай про возможные способы: http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5 (http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5) Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 16:52 2Igors
Вообще вот это строчка: "Но Вы можете слить его (сериализовать) в shared память и прочитать на приемной стороне" особенно не понятна. Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: V1KT0P от Апрель 03, 2012, 16:57 2Igors Это значит что объект будет записан в виде массива байт, а на другой стороне его из этого массива надо будет восстановить.Вообще вот это строчка: "Но Вы можете слить его (сериализовать) в shared память и прочитать на приемной стороне" особенно не понятна. Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: Igors от Апрель 03, 2012, 17:02 Если чесно я не совсем понял чем Ваш пример отличаеться от моего), можно пожалуйста поподробней. Отличается только тем что Вы хотите передавать указатель на сами данные, а лучше передавать указатель на QSharedMemory (или класс его) и пусть он указатель на данные (уже залоченные) возвращает.Конечно это работает только в 1 адресном пр-ве (host + dll(s)), для обмена между 2 приложениями передается ключ (или устанавливаются соглашения какой ключ) 2Igors Напр на Qt стороне Вы передаете QVector. Записали его в shared. На приемной прочитали, создали здесь уже std::vector. Конечно нужны какие-то соглашения по формату данных - как и при любом обмене Вообще вот это строчка: "Но Вы можете слить его (сериализовать) в shared память и прочитать на приемной стороне" особенно не понятна. п.с. Возможно я лезу в дебри, и есть какой-то другой вариант? Но не сокеты! Вариант для чего? Вы упомянули о какой-то (интимной) связи winapi/qt, но что та связь должна делать - хз :). Поэтому мне лучше от рекомендаций воздержатьсяНазвание: Re: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 17:19 2Igors Спасибо дошло!!!
Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: stima от Апрель 03, 2012, 18:49 Еще один вопрос. Можно реализовать что-то наподобии этого?)
Код:
Название: Re: qsahredmemory проблема (разные указатели на data) Отправлено: Igors от Апрель 03, 2012, 18:56 Еще один вопрос. Можно реализовать что-то наподобии этого?) Да, см. QLibrary в букваре. Если у Вас только Вындоуз то можно и оставить как есть |