Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.032 c
3-79650
guest_Dmitry
2004-01-31 12:45
2004.02.25
Access через ADO - логин и пароль?


3-79659
Zilog
2004-01-30 11:29
2004.02.25
DBGrig. Можно ли раскрасить строчки?


3-79543
valerchik
2004-02-02 23:53
2004.02.25
ADOQuery и строка


3-79669
Vic
2004-01-30 17:21
2004.02.25
Типы данных в Access


1-79929
senya
2004-02-06 18:03
2004.02.25
Выдает сообщение Out Of Memory





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский