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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
1-1166694594
Action
2006-12-21 12:49
2007.02.18
Как сохранить иконку в 32 цветах ?


2-1169990981
dasha
2007-01-28 16:29
2007.02.18
почему Opendialog "тормозит" программу


1-1166875068
Новый
2006-12-23 14:57
2007.02.18
А можно ли сейчас как-нибудь купить Delphi 7???


4-1160299759
breeze
2006-10-08 13:29
2007.02.18
дата создания процесса


15-1168795073
IMHO
2007-01-14 20:17
2007.02.18
Падение Шевченко





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский