информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медПортрет посетителяСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Фишинговая атака на Python-разработчиков 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
в основном MS VC 6.0 22.10.01 21:51  Число просмотров: 1085
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
<programming>
[C++] Одна переменная для всех копий dll. 21.10.01 22:19  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Hi All!!!!!!
У меня такая проблема:

Есть dll и из неё вызывается ф-ия из разных приложений.
В dll`ке также есть переменная.
Необходимо чтобы во всех копиях dll (т.е вызывах ф-ии из разных приложений) переменные ссылалист на одну и туже область памяти.

Читал что нужно вставить в dll строчку :

#pragma data_seg(".SHAREDDATA")
.....Глобальные данные........
#pragma data_seg()

А в файл проекта .def:
SECTIONS
.SHAREDDATA Read Write Shared

--------------------------------------------

Но Linker ругается : пусто в разделе Section ф-ла .def

PS Мне просто не хочеться передавать адреса переменных через файл или реестр, это как-то не по профессиональному.
[C++] [C++ Warning] Unit1.cpp(20): W8094 Incorrect use of #pragma comment( [,"string"] ) 22.10.01 14:31  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Во блин, ругается:

[C++ Warning] Unit1.cpp(20): W8094 Incorrect use of #pragma comment( <type> [,"string"] )

..........................

Вот мой код:

#pragma data_seg("Shared")
char handle[100];
char lasthandle[100];
#pragma data_seg()
#pragma comment(linker,"/section:.Shared,rws")


ЗЫ У меня С++Bulder 5.0 - если это так важно. может чё в настройках поменять надо?
Shared у тебя с точкой впереди или нет? 22.10.01 14:56  
Автор: EHOT Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Вот мой код:
>
> #pragma data_seg("Shared")
> char handle[100];
> char lasthandle[100];
> #pragma data_seg()
> #pragma comment(linker,"/section:.Shared,rws")
>
буду настойчив:
линк тот же:http://www.rsdn.ru/article/?baseserv/hookdll.xml
цитата, следующий обзац (_выделено мной_):
Любые переменные, объявленные вами в области действия #pragma, определяющей сегмент данных, будут размещены в этом сегменте данных, при _условии, что они инициализированы_. Если вы не укажете инициализатор, переменные будут размещены в сегменте данных по умолчанию, и #pragma не имеет силы.

ПРИМЕЧАНИЕ
В тот же момент оказывается, что эта особенность не позволяет использоватьмассивыобъектов C++ в разделяемом сегменте данных, т.к. в C++ вы не можете инициализировать массив пользовательских объектов (предполагается, что этим должны заниматься их конструкторы по умолчанию).
-----------------конец цитаты-----------------------------
по поводу > #pragma comment(linker,"/section:.Shared,rws")
а Shared у тебя с точкой в переди или нет?
Shared у тебя с точкой впереди или нет? 22.10.01 17:18  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> буду настойчив:
> линк тот
> же:http://www.rsdn.ru/article/?baseserv/hookdll.xml
> цитата, следующий обзац (_выделено мной_):
> Любые переменные, объявленные вами в области действия
> #pragma, определяющей сегмент данных, будут размещены в
> этом сегменте данных, при _условии, что они
> инициализированы_. Если вы не укажете инициализатор,
> переменные будут размещены в сегменте данных по умолчанию,
> и #pragma не имеет силы.
Что подразумевается под инициализировании - об`явление переменной или нет?

> ПРИМЕЧАНИЕ
> В тот же момент оказывается, что эта особенность не
> позволяет использоватьмассивыобъектов C++ в разделяемом
> сегменте данных, т.к. в C++ вы не можете инициализировать
> массив пользовательских объектов (предполагается, что этим...
Ладно, пусть будет не массив, а некая переменная k:

#pragma data_seg("Shared")
int k;
#pragma data_seg()
#pragma comment(linker,"/section:Shared,rws")


> по поводу > #pragma
> comment(linker,"/section:.Shared,rws")
> а Shared у тебя с точкой в переди или нет?
Всё равно что с точкой, что без неё , ошибка не исчезает..(все варианты перепробовал)

Я даже их пример скачал, но на нём ошибка такая же.
вот это у меня работает 22.10.01 17:26  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>

#pragma data_seg(".shared")
unsigned g_LastUserActionTime = 0;
#pragma data_seg()

link ... /section:.shared,RWS ...
(".shareddata") - не длиннее 8 символов! 22.10.01 11:23  
Автор: EHOT Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> #pragma data_seg(".SHAREDDATA")
> .....Глобальные данные........
> #pragma data_seg()
>

линк: http://www.rsdn.ru/article/?baseserv/hookdll.xml
цитата:
Первое, что вы должны сделать - это создать разделяемый сегмент данных. Это делается при помощи объявления #pragma data_seg. Выберите какое-либо хорошее мнемоническое имя для сегмента данных (оно должно быть не длиннее 8 символов). Просто чтобы подчеркнуть произвольность имени, я использовал здесь свое собственное имя. Во время преподавания я обнаружил, что если я использую имена вида .SHARE или .SHR, или .SHRDATA, то студенты полагают, что имя имеет значение. А оно не имеет значения.

#pragma data_seg(".JOE")
HANDLE hWnd = NULL;
#pragma dta_seg()
#pragma comment(linker, "/section:.JOE,rws")

(".shareddata") - не длиннее 8 символов! 22.10.01 13:49  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
и в PE-файлах поле для имени секции - 8 байт :)
как я сразу не допёр :)

кстати там точка не обязательна
[C++] Одна переменная для всех копий dll. 21.10.01 22:30  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
а ты не в def-файле а в парметрах линкера напиши: /SECTION:.shared,RWS
К ggg 22.10.01 18:31  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> а ты не в def-файле а в парметрах линкера напиши:
> /SECTION:.shared,RWS
А ты в Builder`e не знаешь ли где устанавливать эти опции, чёто не могу найти
я не пользовался билдером 22.10.01 19:05  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
там же должно быть где то всё описано
в хелпе поищи
посмотри что внутри файлов проекта, которые создаёт билдер
а чем ты пользуешься... 22.10.01 20:35  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
в основном MS VC 6.0 22.10.01 21:51  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach