> буду настойчив: > линк тот > же: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 у тебя с точкой в переди или нет? Всё равно что с точкой, что без неё , ошибка не исчезает..(все варианты перепробовал)
Я даже их пример скачал, но на нём ошибка такая же.
Есть dll и из неё вызывается ф-ия из разных приложений.
В dll`ке также есть переменная.
Необходимо чтобы во всех копиях dll (т.е вызывах ф-ии из разных приложений) переменные ссылалист на одну и туже область памяти.
> Вот мой код: > > #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
линк: http://www.rsdn.ru/article/?baseserv/hookdll.xml цитата:
Первое, что вы должны сделать - это создать разделяемый сегмент данных. Это делается при помощи объявления #pragma data_seg. Выберите какое-либо хорошее мнемоническое имя для сегмента данных (оно должно быть не длиннее 8 символов). Просто чтобы подчеркнуть произвольность имени, я использовал здесь свое собственное имя. Во время преподавания я обнаружил, что если я использую имена вида .SHARE или .SHR, или .SHRDATA, то студенты полагают, что имя имеет значение. А оно не имеет значения.
> а ты не в def-файле а в парметрах линкера напиши: > /SECTION:.shared,RWS А ты в Builder`e не знаешь ли где устанавливать эти опции, чёто не могу найти
я не пользовался билдером22.10.01 19:05 Автор: ggg <ggg> Статус: Elderman