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

Вниз

Хранить значение переменной в ОЗУ   Найти похожие ветки 

 
DelphiN! ©   (2004-02-11 20:56) [0]

Народ киньте примерчик записи и считывания значения переменной в ОЗУ и из него, притом так, чтобы никакая другая прога это значение затереть не могла

Заранее благодарен


 
Vlad ©   (2004-02-11 21:16) [1]

var i: integer;
....
i:=25;


 
DelphiN! ©   (2004-02-11 21:21) [2]

А вообще ситуация у меня такая - из главной проги в Длл по средствам параметра ф-ии предается значение(передается оно один раз), которое сохраняется в переменной(глобальной). Одна из ф-ий в Длл вызывается каждый раз при нажатии клавиши на клавиатуре(я хук поставил) и этой ф-ии нужно то самое значение котороя я передал с параметром, и дело в том что глобальная переменная(с этим нужным значением) при этом обнуляется, хоть Длл я при этом и не выгружал. Так вот мне нужно сохранить это значение, при этом не записывая его на диск


 
DelphiN! ©   (2004-02-11 21:25) [3]

>Vlad Сорри я забыл уяснить, см.выше


 
y-soft ©   (2004-02-11 21:32) [4]

Вообще-то адресные пространства процессов в 32-х разрядной Windows изолированы друг от друга...

Можно в принципе создать доступную другим процессам переменную через секцию Shared, но в Delphi это напрямую сделать нельзя

И глобальная переменная в Dll тут не поможет :)

Используйте, например, FileMapping...


 
Ihor Osov'yak ©   (2004-02-11 22:10) [5]

2 DelphiN!

Позволю себе постинг [4] y-soft © немного проще сформулировать.
Глобальная - она только в пределах процесса глобальная (то бишь программы). Если две программы используют одну dll, то установка значения глоб. переменной в одном процессе никак не влияет на значение этой глобальной в другом процессе (это следствие изолированости адресных пространств).
Если нужно все же иметь разделяемые (общие) переменные - самое простое - FileMapping.. Также сделайте поиск по ключевым словам "межпроцессорная комуникация (взаимодействие)"

Зы. Но поначалу было бы очень полезно почитать какую-то книжку по архитектуре Windows..


 
y-soft ©   (2004-02-11 22:15) [6]

>Ihor Osov"yak © (11.02.04 22:10) [5]

В общем-то можно, если написать 16-ти разрядную программу и Dll :)


 
DelphiN! ©   (2004-02-11 23:00) [7]

У меня всего одна программа использует Длл, но значение в глобальной переменной не сохраняется, использование FileMapping тоже не подходит, т.к нужно хранить хандл mapping файла или его адресс в свап-файле, а опять же где его хранить, и если бы я знал это я просто так же бы хранил значение переменной(там id процесса)
А не храню я на диске данные, потаму-что если ф-ия из Длл пытается записать данные на диск в Win9х вылетает системная ошибка(а в ХП почемуто все Ok). Почему так я понять не могу


 
Ihor Osov'yak ©   (2004-02-12 01:20) [8]

2 [7] DelphiN! ©

Что ты имеешь ввиду под "одна программа"? Один процесс, или несколько процессов, "рожденых" из одного exe? (моя реплика "(то бишь программы)." - в пред. посте - не очень удачная).
Каждый процесс в win32 имеет изолированное адресное пространство, не зависимо от того, одна ли это "программа" или не одна (здесь под программой я понимаю exe)..

> если ф-ия из Длл пытается записать данные на диск
У тебя какая-то ошибка

> т.к нужно хранить хандл mapping
вывод неверный. Обрати внимание на аргументы CreateFileMapping, там должно быть что-то типа object name, кажется последний параметр, могу ошибиться, пишу по памяти.. Также в делфи есть демка, кажется назывется IPC - от слов интерпроцесс комуникейшн - там должен быть пример работы с файлами, отображаемыми в память..

Но послушай меня, у тябя уже конкретная необходимось почитать книги об общих концепциях программирования в win32, а то начинаешь немного в дебри ударяться, а в голове - каша... Извини за прямоту.

2 [6] y-soft ©

Чесно говоря, никогда не интересовался, как 16-битные в мире win32 живут :-(. Или раздельно, или как в старом, добром win3. Небыло необходимости.. Да и тянуть cегодня 16 бит в вин32 как то не того.. Если оригинальничать - то уж лучше для такого случая простенький драйверок нарисовать :-). Хотя зачем то огород городить, если файлмапинг идеально для таких задач подходит...


 
y-soft ©   (2004-02-12 08:00) [9]

>Ihor Osov"yak © (12.02.04 01:20) [8]

Чесно говоря, никогда не интересовался, как 16-битные в мире win32 живут :-(.

А все так же - в едином адресном пространстве и с вытесняющей многозадачностью :)

Насчет того, что не стоит тащить в Win32 полностью согласен - не факт, что поддержка сохранится в будущих версиях Windows, хотя сама M$ первая и нарушает...


 
Suntechnic ©   (2004-02-12 08:35) [10]

Проще всего для решения данной проблемы (если действительно речь идёт тольок об одной переменной) двигаться в направлении y-soft ©[4] (а именно shared секции), только dll-ку придётся на VC написать :)


 
y-soft ©   (2004-02-12 08:48) [11]

>Suntechnic © (12.02.04 08:35) [10]

Можно и на Delphi с последующей обработкой скомпилированного модуля внешней утилитой. На Borland.Community кажется Piter Below давал пример...


 
Suntechnic ©   (2004-02-12 09:02) [12]

>y-soft ©
Можно и на Delphi...


Ну зачем извращаться, если достаточно пару директив компилятору и линкеру добавить :)


 
y-soft ©   (2004-02-12 09:07) [13]

>Suntechnic © (12.02.04 09:02) [12]

Ошибся, это был Petr Vones

http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=15387

Зачем идти прямым путем, если можно зигзагами? :))



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

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

Наверх




Память: 0.5 MB
Время: 0.019 c
14-80227
_none_
2004-02-04 11:09
2004.02.25
автаматизация управления проектами


1-79780
Tananda
2004-02-11 16:09
2004.02.25
Не останавливается на Breakpoint


8-80028
Lita
2003-10-23 20:22
2004.02.25
Помогите ламеру с графиком


1-79801
AleksandrKu
2004-02-11 15:27
2004.02.25
Работа с Excel-ом


6-80079
romankul
2003-12-16 13:18
2004.02.25
Широковещательное сообщение с помощю INDY