Главная страница
    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.48 MB
Время: 0.046 c
2-1170323414
oleg_veles
2007-02-01 12:50
2007.02.18
Ошибка при построении запроса


2-1170084942
Квэнди
2007-01-29 18:35
2007.02.18
Сообщение форме


2-1169918419
Mozgan
2007-01-27 20:20
2007.02.18
Как подсчитать количество открытых окон?


3-1164615431
click
2006-11-27 11:17
2007.02.18
Где в TreeView хранить "ключ"?


2-1170007385
Euphoria
2007-01-28 21:03
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский