Главная страница
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.037 c
4-1074350222
MadGhost
2004-01-17 17:37
2004.03.28
Принимать сообщения и их обрабатывать. как бы интерфейс.


1-1078988652
TransparentGhost
2004-03-11 10:04
2004.03.28
Как передать формулу =SUMIF(AC5:AC64;">0";L5:L64) в Excel ?


14-1078222247
Goida
2004-03-02 13:10
2004.03.28
А что такое ИМХО???


7-1072891285
case
2003-12-31 20:21
2004.03.28
COM-Port 125KBaud KAK?


1-1079030891
Rim
2004-03-11 21:48
2004.03.28
Массив