Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Общая секция в Dll  (Прочитано 9069 раз)
0 Пользователей и 1 Гость смотрят эту тему.
djan
Гость
« : 27-02-2007 14:54 » 

Есть у меня Dll, которая загружается несколько раз разными приложениями. Мне необходимо объвить несколько переменных, которые дожны находится в "общей области памяти" для всех загруженых копий dll.
Нашел вотт такое решение
Код:
#pragma data_seg(".myseg")
  int sharedlnts[10] ; // другие переменные общего пользования
 #pragma data_seg()
 #pragma comment(lib, "msvcrt" "-SECTION:.myseg,rws");
но компилятор ругается на последнюю строчку:
LINK : fatal error LNK1104: cannot open file "msvcrt-SECTION:.myseg,rws"
Подскажите что можно сделать? Пишу на Visual Studio 6.0
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-02-2007 17:34 » 

думаю это поможет
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=751673&SiteID=1
Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 27-02-2007 21:36 » 

Кстати djan, помимо того, что по ссылке прозвучала уже фраза
Цитата
Note that all of such variables must be initialized.
обратить на нее особое внимание. Так как без иницилизации твоя переменная не войдет в Шаред секцию, даже если она будет внутри ее.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
djan
Гость
« Ответ #3 : 28-02-2007 11:54 » 

Ложу в общую секцию CList. Без инициализации в общей секции не видится. Можно ли как-нибудь решить эту проблему?

Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 28-02-2007 14:15 » 

Ты чЁ читать не умеешь что ли??? Тебе постом выше Finch написал, что без инициализации твоя переменная не расшариться. Попробуй все же проинициализировать,  глядишь поможет.
Записан

ещё один вопрос ...
djan
Гость
« Ответ #5 : 28-02-2007 14:59 » 

Код:
#pragma data_seg("myseg")
CList <CString,CString&> DecryptList;
#pragma data_seg()
#pragma comment(linker, "/section:myseg,RWS")

Каким образом мне проинициализировать DecryptList? Пробовал создавать указатель на спсок, и инициализировать NULL, не помогает
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 28-02-2007 16:46 » 

Ты попробуй сначала поиграться с простыми типа (к примеру int).
Думается, если ты все правильно делаешь и с типом int  у тебя прокатит, то тут, как я понимаю инициализация NULL  не поможет. Надо сразу память выделять, при чем статически, а не динамически. Это пока предположение, скажи санчала, получается у тебя расшарить переменную типа int.
А лучше еще поиграйся с массивом типа int, сначала со статическим, а потом с динамическим. Результаты обмозгуем.
Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 28-02-2007 20:30 » 

djan, У тебя не получится расшарить объекты, в которых выделяется память динамически. Также не удастся расщарить объекты, которые создаются динамически.
Причина проста. Любое динамическое выделение памяти: это внутряняя область процесса. Другие процессы не имеют доступ к этой памяти.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines