Читайте также:
|
|
Рисунок 1-29 схема обмена данными между приложениями с использованием DLL
Для создания общей области, принадлежащей двум процессам, необходимо:
1) Создать общий проецируемый файл с именем или без имени (для решения данной задачи с именем).
TH:= CreateFileMapping (- --‘имя’);
2) Спроецировать отображаемый файл в адресное пространство процесса:
p:=MapViewOfFie(TH,---,--);
3) Полученный указатель р возвращать каждому приложению.
Действия 1 и 2 должны выполняться для каждого процесса один раз, а действие 3- всякий раз когда возникает необходимость обращаться к области.
Создание Dll, в которой при подключение к процессу (отображение на адресное пространство) с помощью процедуры DllMain будет выполняться действие 1 и 2, а выдача указателя – с помощью экспортируемой функции.
Library Share;
Uses SysUtils,Classes,Windows;
var
HObj: THandle;// отображение объекта отображаемого файла
pMem: Pointer; // указатель на блок
procedure UnMapMemory;// память надо освобождать при завершении приложений, а также при невозможности ее отображения.
begin
If Assigned(pMem) then
begin
UnMapViewOfFile(pMem);
pMem:= nil;
end;
If hObj>0 then
CloseHandle (hObj);
hObj:=0;
end;
procedure MapMemory (Size:Dword);
//1) begin
hObj:=CreateFileMapping(MaxDword,nil,Page_ReadWrite,0,Size, PChar(‘_ShareMem’));
//2) pMem:=MapViewOfFile(hObj,File_Read_Write,0,0,1);
If not Assigned (pMem) then
UnMapMemory //удалить отображение
end;
//3) procedure DllMain(Act:Dword);
begin
case kod of
dll_Process_Attach;
begin
pMem:=nil;
hObj:=0;
MapMemory(2000);
end;
Function GetBlock: pointer;stdcall;
begin
result:=pMem;
end;
exports GetBlock;
begin
DllProc:=@DllMain;
DllMain:=(Dll_Process_Attach);
end;
edit2.SetTextBuf(pBuf);
Дата добавления: 2015-07-07; просмотров: 193 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
На рисунке 1 -28 показаны перечисленные этапы и используемые для их выполнения системные обрабатывающие программы. | | | Тема 1.6 Структура MS Windows и драйверы режима ядра |