Главная страница
    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.048 c
15-1170059551
brother
2007-01-29 11:32
2007.02.18
можно ли такое нарисовать в екселе?


15-1169802947
Steep
2007-01-26 12:15
2007.02.18
Отчеты


15-1169821131
Vlad Oshin
2007-01-26 17:18
2007.02.18
Кстати, мою анкету кто-нибудь видит?


15-1170042677
Slider007
2007-01-29 06:51
2007.02.18
С днем рождения ! 28 января


2-1170416926
Garacio
2007-02-02 14:48
2007.02.18
Как в Delphi получить букву системного диска?





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