| Автор
| Сообщение |
|
|
|
Цитата |
|
Есть такая тема. У меня есть приложение, которое содержит определенную информацию. Нужно эту информацию определенным образом связать с 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
Откуда: Яблочный рай
|
|
|
Цитата |
|
при OpenFileMapping проверял ошибки?
и попробуй B1:= MapViewOfFile(pMap1, FILE_MAP_ALL_ACCESS, 0, 0, FileSize); _________________ нельзя давать всем всего, ибо всех много, а всего мало |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
А зачем нужен openfilemapping?
CreateFileMapping вернет дескриптор memory-файла, если тот уже был создан ранее _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Ошибки проверял, OpenFileMapping выдает INVALID_PARAMETER. Вроде бы все правильно:
pMap1:= OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'Connect');
Работает пара этих приложений примерно так. Каждое в пределах своего окна работает нормально. Делаю следующее: во втором приложении (которое читает) записываю. Пытаюсь прочитать первым. Выводит 2-3 каких то левых символа. Опять записываю вторым. Читаю первым. Опять выводит 2-3 символа, но уже других. Вскоре вообще перестает что-либо выводить. При этом во втором приложении все работает тип-топ. то же самое происходит, если приложения поменять ролями. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
to drPass.
Один хрен не работает. Вернее, так же криво работает. только вместо
INVALID_PARAMETER выдает ALREADY_EXSISTS |
|
| В начало |
|
 |
 Gelios
Oracle-вый маньяк, Админ

Возраст: 37
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
|
|
| В начало |
|
 |
|
|
|
Цитата |
|
| GELIOS, я же ведь так и делаю. "чё за ботва?". |
|
| В начало |
|
 |
 Gelios
Oracle-вый маньяк, Админ

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

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
>Rolex
А он и должен, если все тип-топ, возвращать ошибку Already_exists, вместе с рабочим хендлом на этот файл _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
 |
|
|
|
Цитата |
|
Gelios, скажи хоть как книжка называется, а то я замаюсь примеры оттуда качать с моей скоростью.
DrPass, похоже, что ты прав. Все-таки работает так же, как и с OpenFileMapping() |
|
| В начало |
|
 |
 Gelios
Oracle-вый маньяк, Админ

Возраст: 37
Знак зодиака: 
Зарегистрирован: 10.03.2005
Сообщения: 6141
Откуда: Яблочный рай
|
|
|
Цитата |
|
Делфи 5 для разработчиков
Тейкстера, Пачеко _________________ нельзя давать всем всего, ибо всех много, а всего мало |
|
| В начало |
|
 |
|