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

Вниз

В Cи можно а в Delphi?   Найти похожие ветки 

 
bar   (2004-07-08 15:31) [0]

Приветствую господа мастера Delphi.
Вот недавно прочитал
----цитата------
В Win32 библиотека DLL располагается в области памяти загружающего ее процесса. Каждому процессу предоставляется отдельная копия "глобальной" памяти DLL, которая реинициализируется каждый раз, когда ее загружает новый процесс. Это означает, что динамическая библиотека не может использоваться совместно, в общей памяти, как это было в Winl6.

И все же, выполнив ряд замысловатых манипуляций над сегментом данных DLL, можно создать общую область памяти для всех процессов, использующих данную библиотеку.

Допустим, имеется массив целых чисел, который должен использоваться всеми процессами, загружающими данную DLL. Это можно запрограммировать следующим образом:

   #pragma data_seg(".myseg")
   int sharedlnts[10] ;
   // другие переменные общего пользования
   #pragma data_seg()
   #pragma comment(lib, "msvcrt" "-SECTION:.myseg,rws");

Все переменные, объявленные между директивами #pragma data_seg(), размещаются в сегменте .myseg. Директива #pragma comment () - не обычный комментарий. Она дает указание библиотеке выполняющей системы С пометить новый раздел как разрешенный для чтения, записи и совместного доступа.
--------------------------------------
Можно ли сделать так в Delphi (чтоб данные дллки глобальными были ) или нет? И если можно (я в это верю, Delphi -- сила) то как?


 
Digitman ©   (2004-07-08 16:06) [1]


> Можно ли сделать так в Delphi


нельзя. такой возможности линкер в составе делфи не поддерживает

но в делфи можно реализовать код, который будет модифицировать полученный PE-файл таким образом, чтобы требуемая секция, содержащая будущие общедоступные данные, была расшарена

наиболее простое решение - утилита из состава пакета Инди


 
Игорь Шевченко ©   (2004-07-08 16:12) [2]


> Можно ли сделать так в Delphi (чтоб данные дллки глобальными
> были ) или нет? И если можно (я в это верю, Delphi -- сила)
> то как?


Нельзя. Гораздо проще использовать SharedMemory, реализуемую Memory-mapped файлами


 
y-soft ©   (2004-07-08 16:37) [3]

>Digitman ©   (08.07.04 16:06) [1]

Я как-то давал ссылку (жаль сейчас не помню), на Borland Community аналогичная утилитка тоже есть...


 
bar   (2004-07-09 10:15) [4]

>>Игорь Шевченко ©   (08.07.04 16:12) [2]
Гораздо проще??? Почему?


 
y-soft ©   (2004-07-09 12:35) [5]

>bar   (09.07.04 10:15) [4]

Гораздо проще??? Почему?

Потому что не надо обрабатывать дополнительными утилитами скомпилированный модуль



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

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

Наверх




Память: 0.48 MB
Время: 0.022 c
3-1090927751
Экспериментатор
2004-07-27 15:29
2004.08.22
Как правильно сортировать?


3-1090906118
artem123
2004-07-27 09:28
2004.08.22
Инкрементное поле в Firebird 1.5 через dbExpress


1-1091605973
Молодой
2004-08-04 11:52
2004.08.22
Почему UpperCase не работает с кирилицой и чем её модно заменить?


14-1091598934
User_OKA
2004-08-04 09:55
2004.08.22
Сотовый телефон


1-1091812716
sdw_syscoder
2004-08-06 21:18
2004.08.22
Поиск в файле