Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

Передача массива между приложениями   Найти похожие ветки 

 
GEN++ ©   (2007-01-27 13:11) [0]

Мне нужно предать 128 слов данных из одного париложения в
другое. Указатель на глобальный массив приложения1 передаю
в прилодение 2 через SendMessage. Численно принятый указатель совпадает с отправленным, а вот данные не
совпадают. Прошу помочь среализацией или примером.
Заранее спасибо.


 
Zeqfreed ©   (2007-01-27 13:27) [1]

Разумеется, не совпадают. Слышал что-нибудь о виртуальном адресном пространстве? Так вот, у каждого процесса оно свое. Могу предложить читать данные вторым процессом через ReadProcessMemory, хотя, лучше было бы огранизовать нормальное межпроцессное взаимодействие.


 
колхоз глазами хакера   (2007-01-27 13:46) [2]

> [0] GEN++ ©   (27.01.07 13:11)
смотри в сторону WM_COPYDATA


 
Zeqfreed ©   (2007-01-27 13:48) [3]

> колхоз глазами хакера   (27.01.07 13:46) [2]

А кроме WM_COPYDATA других способов нет?


 
GEN++ ©   (2007-01-27 13:58) [4]

>Zeqfreed
ReadProcessMemory вроде бы должен сработать
А я счтал что Heap для всех процессов одна.


 
Olivetti   (2007-01-27 14:03) [5]

А я счтал что Heap для всех процессов одна

Это было давно и не правда.


 
SergGG ©   (2007-01-27 14:31) [6]

> А кроме WM_COPYDATA других способов нет?
Есть много способов передачи данных:
-DDE
-Socet
-NetBIOS
-......

Наиболее простым является DDE (Есть готовые компоненты)


 
TStas ©   (2007-01-27 14:59) [7]

А есть и уж совсем простой способ - через буфер обмена. Вам же надо массив строк передать.


 
Zeqfreed ©   (2007-01-27 16:46) [8]

> Вам же надо массив строк передать.

Вообще-то, в [0] написано о 128 словах, про строки там ничего.


 
Loginov Dmitry ©   (2007-01-27 17:41) [9]

Используй FileMapping. Практически все способы межпроцессного взаимодействия основаны на этой технологии.


 
GEN++ ©   (2007-01-27 22:37) [10]

>Zeqfreed
Что то не работает ReadProcessMemory
читает 0 байт:
в качестве 1-го параметра подставляю Application.Handle из которого
читаю (передаю через wParam sendMessage) или неправильно????


 
antonn ©   (2007-01-27 23:08) [11]

TStas ©   (27.01.07 14:59) [7]
А есть и уж совсем простой способ - через буфер обмена.

по рукам за такое:)


 
GEN++   (2007-01-28 00:11) [12]

*/


 
GEN++   (2007-01-28 00:12) [13]

А пример написать - никак не получается.


 
antonn ©   (2007-01-28 00:41) [14]


type
TWindowStick = record
 x:integer;
end;

TForm
private
procedure ReceiveMessage (var Msg: TWMCopyData); message WM_COPYDATA;

...


отправляем
var cd:TCopyDataStruct; WindowStick:TWindowStick; ms: TMemoryStream;
begin
if HandleWind<>0 then begin

ms:=TMemoryStream.Create;
try
WindowStick.x:=10; //это просто структура для примера
ms.Write(WindowStick,sizeof(WindowStick));
with cd do begin
 dwData := 1;
 cbData := ms.Size;
 lpData := ms.Memory;
end;                                ///******
SendMessage(HandleWind, WM_COPYDATA, 500, Longint(@cd))

finally
ms.Free;
end;
end;


принимаем
procedure TStickForm.ReceiveMessage(var Msg: TWMCopyData);
var pcd: PCopyDataStruct; s:String; ws:TWindowStick; _M:TMemoryStream;
begin
 pcd:=PCopyDataStruct(Msg.CopyDataStruct);

 if pcd.cbData=sizeof(TWindowStick) then begin
    _M:=TMemoryStream.Create;
  try
    with Msg.CopyDataStruct^ do
    _M.Write(lpdata^, cbdata);
    _M.Position:=0;
    _M.Read(ws,sizeof(TWindowStick));
    //все, вот и она структура - ws
  finally
   _M.free;
  end;

  exit;
 end;
end;


 
antonn ©   (2007-01-28 00:42) [15]

я правда не все повырезал, но думаю смысл будет понятен:) В HandleWind должен быть хендл окна "приемника"


 
Zeqfreed ©   (2007-01-28 01:12) [16]

> GEN++ ©   (27.01.07 22:37) [10]

Насколько я помню, там нужно передавать дескриптор процесса. В справке же должно быть написано :)


 
_SuN_   (2007-01-28 21:45) [17]

podderzivaju FileMapping))



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

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
6-1158149691
KyRo
2006-09-13 16:14
2007.02.18
Есть ли соединение по сети ?


3-1164292131
Константин_
2006-11-23 17:28
2007.02.18
групировка в sql запросе


2-1170234910
Beavercrazy
2007-01-31 12:15
2007.02.18
Проблемы переноса из memo в таблицу


2-1170318726
Lera
2007-02-01 11:32
2007.02.18
Имя процедуры


15-1169933287
PHPdeveloper
2007-01-28 00:28
2007.02.18
бесплатный хостинг