Форум: "Основная";
Текущий архив: 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