Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Подсобите с разделяемой памятью


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Rolex
Гость







СообщениеСр, 21-Май-2003 11:46    Заголовок сообщения: Подсобите с разделяемой памятью
Цитата

Есть такая тема. У меня есть приложение, которое содержит определенную информацию. Нужно эту информацию определенным образом связать с MS Word, во время сохранения файла. При этом нельзя допустить хранения этих данных на диске (при аварийном выключении компьютера информация останется, что крайне нежелательно).
Идея следующая. Есть такая функция: CreateFileMapping(...) и сопутствующие, которые отображают файл в памяти. С помощью них записать в память эту информацию. При сохранении документа в Word запускается мой макрос, читает информацию и использует как ему заблагорассудится. С макросом пока проблем нет. Создал приложение, текст примерно такой:

procedure TForm1.FormCreate(Sender: TObject);
begin
pMap1:=CreateFileMapping($FFFFFFFF, NIL, PAGE_READWRITE or SEC_COMMIT, 0, FileSize, 'Connect');
B1:= MapViewOfFile(pMap1, FILE_MAP_WRITE, 0, 0, FileSize);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
B1^:=Edit1.Text;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2.Text:= B1^;
end;

(При нажатии на кнопку Button1 записывается в память, Button2 - читается)

В пределах одного приложения все работает замечательно. Стоит только запустить еще одно такое же (соответственно, изменив CreateFileMapping на OpenFileMapping), как становится ясно, что память не такая уж и общая.
Может, кто знает как сделать общий доступ. Буду очень признателен. Спасибо за терпение.
В начало
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеСр, 21-Май-2003 12:10 
Цитата

при OpenFileMapping проверял ошибки?
и попробуй B1:= MapViewOfFile(pMap1, FILE_MAP_ALL_ACCESS, 0, 0, FileSize);

_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеСр, 21-Май-2003 23:00 
Цитата

А зачем нужен openfilemapping?
CreateFileMapping вернет дескриптор memory-файла, если тот уже был создан ранее

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Rolex
Гость







СообщениеЧт, 22-Май-2003 9:39 
Цитата

Ошибки проверял, OpenFileMapping выдает INVALID_PARAMETER. Вроде бы все правильно:
pMap1:= OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'Connect');
Работает пара этих приложений примерно так. Каждое в пределах своего окна работает нормально. Делаю следующее: во втором приложении (которое читает) записываю. Пытаюсь прочитать первым. Выводит 2-3 каких то левых символа. Опять записываю вторым. Читаю первым. Опять выводит 2-3 символа, но уже других. Вскоре вообще перестает что-либо выводить. При этом во втором приложении все работает тип-топ. то же самое происходит, если приложения поменять ролями.
В начало
Rolex
Гость







СообщениеЧт, 22-Май-2003 9:49 
Цитата

to drPass.
Один хрен не работает. Вернее, так же криво работает. только вместо
INVALID_PARAMETER выдает ALREADY_EXSISTS
В начало
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеЧт, 22-Май-2003 9:53 
Цитата

посмотри топик http://delphi.chertenok.ru/forum/viewtopic.php?t=1159
_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
Rolex
Гость







СообщениеЧт, 22-Май-2003 12:39 
Цитата

GELIOS, я же ведь так и делаю. "чё за ботва?".
В начало
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеЧт, 22-Май-2003 12:51 
Цитата

возьми исходники проекта (там сайт указан) и попробуй...
_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеЧт, 22-Май-2003 23:35 
Цитата

>Rolex
А он и должен, если все тип-топ, возвращать ошибку Already_exists, вместе с рабочим хендлом на этот файл

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Rolex
Гость







СообщениеПт, 23-Май-2003 13:31 
Цитата

Gelios, скажи хоть как книжка называется, а то я замаюсь примеры оттуда качать с моей скоростью.
DrPass, похоже, что ты прав. Все-таки работает так же, как и с OpenFileMapping()
В начало
Пол:Муж Gelios
Oracle-вый маньяк, Админ


Возраст: 37
Знак зодиака: Водолей
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
СообщениеПт, 23-Май-2003 13:47 
Цитата

Делфи 5 для разработчиков
Тейкстера, Пачеко

_________________
нельзя давать всем всего, ибо всех много, а всего мало
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100