Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

CreateMappingFile   Найти похожие ветки 

 
DelphiN! ©   (2004-03-09 20:36) [0]

Вот сделал признок в памяти на то, что моя прога иже запущена, а как его убрать не знаю. Вот код:
AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"MyProg");

if GetLastError = ERROR_ALREADY_EXISTS then
halt;  

Тоесть моя прога 2 раза не запустится, а как убрать этот признак, чтобы GetLastError не возвращяла ERROR_ALREADY_EXISTS?

Буду рад примерчику
Заранее благодарен


 
jack128 ©   (2004-03-09 21:45) [1]

Хелп читать умеем?

o fully close a file mapping object, an application must unmap all mapped views of the file mapping object by calling UnmapViewOfFile, and close the file mapping object handle by calling CloseHandle.


 
DelphiN! ©   (2004-03-09 22:01) [2]

>Jack128 Я читал.
Написал следующее:

var
Base: Pointer;
AppExample:integer;
begin
AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");//Забиваем

Base:=MapViewOfFile(AppExample,FILE_MAP_READ,0,0,0);

UnMapViewOfFile(Base);//Освобаждаем
CloseHandle(AppExample);//---|---|---

AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");//Забиваем

if GetLastError = ERROR_ALREADY_EXISTS then //по идее тут должно быть false, так как я выше забил освобожденную память, но не тут-то было
halt;

ShowMessage("Ok");

По идее, если память освобаждается, то должен появиться showmessage, но он не появляется, следовательно память не освобаждается!


 
jack128 ©   (2004-03-09 22:27) [3]

Мой вариант
var
 Base: Pointer;
 AppExample:integer;
begin
 AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");//Забиваем

 Base:=MapViewOfFile(AppExample,FILE_MAP_READ,0,0,0);

 UnMapViewOfFile(Base);//Освобаждаем
 CloseHandle(AppExample);//---|---|---

 AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");//Забиваем

 if (AppExample = 0) and (GetLastError = ERROR_ALREADY_EXISTS) then //по идее тут должно быть false, так как я выше забил освобожденную память, но не тут-то было
   WriteLn("Already_exists")
 else
 begin
   WriteLn("Ok");
   CloseHandle(AppExample);
 end;
 ReadLn;
end.
на выходе Ok. Какие выводы?


 
jack128 ©   (2004-03-09 22:32) [4]

сорри, естественно
if (AppExample <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then


 
DelphiN! ©   (2004-03-09 23:09) [5]

> jack128 У меня не работает:)

AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");

Base:=MapViewOfFile(AppExample,FILE_MAP_READ,0,0,0);

UnMapViewOfFile(Base);
CloseHandle(AppExample);

AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");

if (AppExample <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then
showmessage("Already_exists")
else
begin
  showmessage("ok");
  CloseHandle(AppExample);
end;

После выполнения Сообщение Already_exists

А вообще если программа будет иметь следующий код:

AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");
if GetLastError = ERROR_ALREADY_EXISTS then
halt;


То если в системе больше нет ее копий она запуститься, если же есть то произойдет halt. Если мы закроем и откроем программу, то она запуститься нормально, из этого следует что память маппированного файла освободилась после закрытия. Так вот мне нужно добиться такого-же эффекта освобождения памяти маппированного файла, как и при закрытии программы, но естественно не закрывая ее :-). Выполнение кода AppExample:= CreateFileMapping($ffffffff,nil, PAGE_READONLY,0,32,"Map1");
Base:=MapViewOfFile(AppExample,FILE_MAP_READ,0,0,0);
UnMapViewOfFile(Base);
CloseHandle(AppExample);

такого эффекта ксожалению не дает, так вот как мне добиться этого?


 
jack128 ©   (2004-03-10 00:04) [6]

Советую пойти в шаманы.. ;-)
Или посмотреть, что возвращает CloseHandle (при первом вызове)


 
DelphiN! ©   (2004-03-10 20:16) [7]

Оказывается в моем 1-ом варианте все работало :-)
Просто я забыл из памяти Длл убрать, которая при освобождении мэпа его заного забивала

Вобщем большое сорри за рассеяность :)



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
1-1078902844
NPR2
2004-03-10 10:14
2004.03.28
public array of THandle


14-1077725322
copyr25
2004-02-25 19:08
2004.03.28
В СИЗО Ленинградской области заключенные объявили


1-1078398447
Лысый
2004-03-04 14:07
2004.03.28
DBComboBox


1-1078853788
DelphiN!
2004-03-09 20:36
2004.03.28
CreateMappingFile


7-1072511631
Evgeniy_K
2003-12-27 10:53
2004.03.28
Заголовок активного окна