Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |  |
вот это у меня работает 22.10.01 17:26 Число просмотров: 1060
Автор: ggg <ggg> Статус: Elderman
|
#pragma data_seg(".shared")
unsigned g_LastUserActionTime = 0;
#pragma data_seg()
link ... /section:.shared,RWS ...
|
<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
|
|
|
|