Форум: "Потрепаться";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
ВнизКак объявоть переменную(указатель) для всех процессов Найти похожие ветки
← →
Maksimius (2003-10-11 18:57) [0]Как объявоть переменную(указатель) для всех процессов запущенных в системе?
← →
Nikolay M. (2003-10-11 19:05) [1]Как ты себе это представляешь? :)
← →
Digitman (2003-10-12 13:04) [2]никак. понятия "переменная"и "указатель" строго индивидуальны для каждого конкретного приложения (процесса)
если же речь таки идет просто о неких общедоступных глобальных данных то задача может быть решена как минимум двумя способами :
1. окну верхнего уровня, создаваемого неким процессом некоего приложения, задается св-во SetWindowWord/Long(GWL_USERDATA). Тогда все прочие процессы прочих приложений, имеющие доступ к дисктопу данного окна, находят это окно по имени/классу и считывают/перезаписывают это св-во
2. одним из процессов некоего приложения создается именованый FileMap-объект (см. CreateFileMapping). Прочие процессы прочих приложений получают доступ к глоб.данным с пом. (OpenFileMapping / MapViewOfFile)
← →
default (2003-10-12 13:10) [3]никак
← →
SammIk (2003-10-13 21:17) [4]Внедрение в процесс, это описано у рихтора и в нете
← →
Songoku (2003-10-13 22:17) [5]Используй обьекты ядра!
← →
y-soft (2003-10-14 06:50) [6]Вопрос неправильно сформулирован, в такой формулировке ответ однозначный - никак. Если же говорить о передаче данных между процессами (в том числе и интерпретируемых процессами как указатели), то решений много. Кроме 2-х, указанных уважаемым Digitman ©, часто используется доступ через общие Dll, WM_COPYDATA etc...
← →
Mike Kouzmine (2003-10-14 10:13) [7]Songoku © (13.10.03 22:17) [5] То есть "ядерные объекты".
← →
Иван Шихалев (2003-10-14 12:07) [8]
> часто используется доступ через общие Dll
Не получится. Общие DLL не дают общих данных.
← →
Юрий Федоров (2003-10-14 13:28) [9]>>Иван Шихалев © (14.10.03 12:07) [8]
Почему же ?
Delphi1, 16-бит, и вперед :-))
← →
y-soft (2003-10-14 14:39) [10]>Иван Шихалев © (14.10.03 12:07) [8]
Возможно Вы не о том подумали, но вот пример из руководства Тодд Миллер и Девид Пауэл "Использование Delphi 3" "Диалектика", 1997 (привожу дословно). Это простая оболочка над FileMapping:
library ShareHeap
uses
Forms, SysUtils, Windows;
const
Key : string = "_GMem";
MaxSize = $FFFF;
var
hObjHand : THandle;
pGMem : pointer;
procedure UnMapMemory;
begin
if assigned(pGMem) then
begin
UnMapViewOfFile(pGMem);
pGMem := nil;
end;
if hObjHand > 0 then
CloseHandle(hObjHand);
hObjHand := 0;
end;
procedure MapMemory(dwAllocSize : DWORD);
begin
hObjHand := CreateFileMapping(MAXDWORD,nil,PAGE_READWRITE,0,dwAllocSize,PChar(Key));
if hObjHand = 0 then
Raise Exception.Create("Could not create file-mapping object");
pGMem := MapViewOfFile(hObjHand,FILE_MAP_WRITE,0,0,1);
if not assigned(pGMem) then
begin
UnMapMemory;
raise Exception.Create("Could not map file");
end;
end;
procedure DllMain(dwReason : DWORD);
begin
case dwReason of
dll_Process_Attach:
begin
pgMem := nil;
hObjHand := 0;
MapMemory(MaxSize);
end;
dll_Process_Detach:
UnMapMemory;
end;
end;
function GetGBlock : pointer; stdcall;
begin
Result := pGMem;
end;
exports
GetGBlock;
begin
DllProc := @DllMain;
DllMain(dll_Process_Attach);
end.
← →
Иван Шихалев (2003-10-14 14:43) [11]
> Возможно Вы не о том подумали, но вот пример из руководства
> Тодд Миллер и Девид Пауэл "Использование Delphi 3" "Диалектика",
> 1997 (привожу дословно). Это простая оболочка над FileMapping:
Да уж, я совсем не о том подумал.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c