Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.03.09;
Скачать: [xml.tar.bz2];

Вниз

переменные в DLL   Найти похожие ветки 

 
Suffer   (2013-05-18 18:15) [0]

Нужна помощь. Есть DLL, которую подгружают в свое адресное пространство несколько программ, но каждый раз при подключении к новому адресному пространству создается новый экземпляр Dll и все переменные описанные в DLL в блоке VAR стираются(становятся пустыми).

при помощи LoadLibrary я могу узнать Hinstance у текущей подгруженной DLL.

Подскажите пожалуйста как по Hinstance можно присвоить значение переменной описанной в Экземпляре библиотеки???


 
clickmaker ©   (2013-05-18 18:53) [1]

> каждый раз при подключении к новому адресному пространству
> создается новый экземпляр Dll и все переменные описанные
> в DLL в блоке VAR стираются

глобальные переменные являются разделяемыми


 
clickmaker ©   (2013-05-18 19:37) [2]

а, хрен, вру. В дельфи  data_seg не сделаешь...
Тогда через экспортирумые функции получать/записывать значения


 
clickmaker ©   (2013-05-18 19:51) [3]

в принципе можно и File Mapping использовать для создания разделяемой области. Создавать маппинг в DLL_PROCESS_ATTACH, отмапливать в DLL_PROCESS_DETACH


 
Плохиш ©   (2013-05-19 00:13) [4]

DLL работают в адресном пространстве вызвавшего процесса, т.к. не получится легко тырит данные из других програм.


 
NoUser ©   (2013-05-19 02:35) [5]

>  как по Hinstance можно присвоить значение переменной ...
никак.


library DllVar;
uses Windows;
//---------------------
type
 PMyData = ^TMyData;
 TMyData = record
   D1 :Integer;
   D2 :Integer;
   SubData : record
     A1 :Cardinal;
     A2 :Cardinal;
   end;
 end;
//---------------------
var
 hMap      : THandle;
 MyDataPtr : PMyData;
//---------------------
procedure MyDllProc(Reason:Integer);
begin
 if Reason = DLL_PROCESS_DETACH then begin
   UnmapViewOfFile(MyDataPtr);
   CloseHandle(hMap);
 end;
end;
//---------------------
function MyDataInDll:PMyData;
begin
 Result:=MyDataPtr;
end;
exports
 MyDataInDll;
//---------------------
begin
 hMap := CreateFileMapping(INVALID_HANDLE_VALUE,nil,PAGE_READWRITE,0,sizeof(TMyData),PCha r("MyData"));
 MyDataPtr := MapViewOfFile(hMap ,FILE_MAP_WRITE or FILE_MAP_READ,0,0,0);
 DllProc := @MyDllProc;
end.


Но, Suffer, помни! File Mapping  - не панацея.     :)


 
Германн ©   (2013-05-19 04:09) [6]


> NoUser ©   (19.05.13 02:35) [5]
>
> >  как по Hinstance можно присвоить значение переменной
> ...
> никак.
>

Этого заявления было вполне достаточно.


 
Suffer   (2013-05-20 00:07) [7]

С File Mapping не знаком, но разберусь, спасибо!!!


 
Suffer   (2013-05-20 00:10) [8]

Обращение к переменным не делаю, но так как с File Maping не разбирался то создал типизированный file и помещал туда объекты, а в DLL уже извлекал!!



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

Форум: "Начинающим";
Текущий архив: 2014.03.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.002 c
15-1379206986
Кто б сомневался
2013-09-15 05:03
2014.03.09
WPF - WTF? Не смог найти сайт на wpf


15-1380039505
Кто б сомневался
2013-09-24 20:18
2014.03.09
Запустить программу после выхода из StandBy (XPx64)


6-1271163307
pvr
2010-04-13 16:55
2014.03.09
IdHTTP + SSL


2-1368718620
IRS
2013-05-16 19:37
2014.03.09
Вывод трафика по каждому пользователю в график.


2-1368995112
Suffer
2013-05-20 00:25
2014.03.09
Uses в DLL(как правильно подключить??)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский