Форум: "Начинающим";
Текущий архив: 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