Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2015, 09:52   #1
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию передача струкутуры сообщениями

Здравствуйте господа гуру С++
Вопрос следующий
У меня имеется структура в проекте на С++

Код:
  typedef struct TRouteInfo
  {
    int               marker; //0xC0C0F0F0
    TRouteHead	HEAD;
    int               LegCount;
    char *          LEG; 
  } TRouteInfo;
передаю наполненную информацию в сообщении вот так:

Код:
const WPARAM MSG_INFO = 0x0700;  

TAirportRouteInfo SND;
  memset(&SND, 0, sizeof(TRouteInfo));
  SND.marker = 0xC0C0F0F0;

.... заполнение параметрами

  ::SendMessage(FHandleDB, MSG_INFO, 0xB000, (LPARAM) &SND);
на приёме, приложение на Delphi, которое принимает сообщение
Код:

  PRouteInfo = ^TRouteInfo;
  TRouteInfo = packed record
    marker  : integer;
    HEAD    : TRouteHead;
    count   : integer;
    segment : pointer; 
  end;

public
     procedure GetMessage(var message : TMessage); message $6A2F;
  end;

var
  Form1: TForm1;

implementation
uses ArincType;
{$R *.dfm}

{ TForm1 }

...
procedure TForm1.GetMessage(var message: TMessage);
var ref  : PRoutenfo;
    addr : integer;
begin
  if message.WParam = $B000 then
  begin
     ref  := PRouteInfo(message.LParam);
     if ref^.marker<> $C0C0F0F0 then exit;
  end;
  message.Result := 1;
end;
---------------
в результате:
1. отправленный LPARAM параметр полностью совпадает с принятым, то есть, по сути указатель на память на отправке = указателю на приёме
Но при просмотре через дебагер получаю следующую картиину


ВОПРОС: как правильно отправить структуру в С++ чтобы корректно её принять в Делфи?
Изображения
Тип файла: jpg 3333.jpg (15.5 Кб, 144 просмотров)
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 28.06.2015, 11:10   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

1) Использовать общую память
2) Воспользоваться сообщением WM_COPYDATA
3) Передавать данные через сокет

Прочитать в интернете об Inter Process Communications
waleri вне форума Ответить с цитированием
Старый 28.06.2015, 12:05   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
отправленный LPARAM параметр полностью совпадает с принятым, то есть, по сути указатель на память на отправке = указателю на приёме
Но при просмотре через дебагер получаю следующую картиину
Правильно. Значения указателей совпадают, а данные по этому адресу разные, т.к. находятся в разных адресных пространствах.
юзай WM_COPYDATA. в интернетах ахулиард примеров.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.06.2015, 12:29   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
Радость

Цитата:
Сообщение от waleri Посмотреть сообщение
1) Использовать общую память
2) Воспользоваться сообщением WM_COPYDATA
3) Передавать данные через сокет

Прочитать в интернете об Inter Process Communications
----------------
вопрос снимается.
в результате , оба приложения будут оснащены в виде DLL которые будут вызываться с единого приложения.

спасибо всем откликнувшимся
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 28.06.2015, 12:52   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

DLL вам не поможет, адресное пространство от этого не станет единым.
waleri вне форума Ответить с цитированием
Старый 28.06.2015, 13:02   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
DLL вам не поможет, адресное пространство от этого не станет единым.
при раскладе "1.exe ---> shared.dll --->2.exe" - согласен!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.06.2015, 19:03   #7
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
DLL вам не поможет, адресное пространство от этого не станет единым.
структура


EXE +-> dll1 (это моя которая отсылает)
|
+-> dll2
|
+-> dll3
|
+-> dll4 (это моя которая принимает)
|
+-> ... n

получится?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 28.06.2015, 20:00   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
структура
это одно адресное пространство.
Цитата:
1.exe ---> shared.dll --->2.exe
два. чуешь разницу?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.06.2015, 23:47   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Если они в одном процессе почему тогда просто не вызвать нужный метод?
waleri вне форума Ответить с цитированием
Старый 28.06.2015, 23:55   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Если они в одном процессе почему тогда просто не вызвать нужный метод?
пассажир чот темнит, либо пишет монстра на костылях.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен сообщениями ZuBy Работа с сетью в Delphi 35 24.01.2017 14:27
Двусторонний обмен сообщениями 11vmk Работа с сетью в Delphi 0 10.10.2013 21:59
обмен сообщениями David Villa Общие вопросы C/C++ 1 23.06.2012 12:13
Проблема с сообщениями -=taifun=- О форуме и сайтах клуба 1 23.11.2011 13:36
Проблема с broadcast сообщениями. profi Win Api 1 27.02.2010 18:55