• Still Swamp (28.05.08 11:03) [0]
    Есть некое оконное Win32 приложение. Запускаем его и получаем процесс A. Хотелось бы при запуске его второй копии (процеесс B) иметь возможность выполнить какую нить функцию в процессе A вызываемую из процесса B.

    Как это сделать.
  • Palladin © (28.05.08 11:18) [1]
    Учимся оформлять вопросы (С) ИШ
  • Still Swamp (28.05.08 11:24) [2]
    Мои извинения. Отредактировать мессагу не могу. Просто отвлекли когда отправлял. Если есть возможность, исправьте тему на "как вызвать процедуру в запущенном приложении из другого".
  • Palladin © (28.05.08 11:38) [3]
    используй механизм сообщений
  • Still Swamp (28.05.08 11:42) [4]
    SendMessage?
    Хотелось бы PChar просунуть.
    Описываю структуру, потом ее указатель параметром в Sendmessage отправлять. Так?
  • Palladin © (28.05.08 11:43) [5]
    см. WM_COPYDATA
  • Still Swamp (28.05.08 11:56) [6]
    Сенкс.
  • DiamondShark © (28.05.08 13:19) [7]
    Реализуй в процессе Automation-сервер.
    Там не то, что PChar, слона просунуть можно.
  • Still Swamp (28.05.08 18:56) [8]
    C SendMessage затык.

    Это до самого создания приложения

    Handle:=FindWindow(nil, PAnsiChar('VBCSLauncherMainForm'));
    if Handle<>0 then begin
     SendMessage(Handle, WM_COPYDATA, 0, 0);
    end else begin
     Application.Initialize;
     Application.CreateForm(TVBCSLauncherMainForm, VBCSLauncherMainForm);
     Application.Run;
    end;

    Это уже в окошке в котором ловлю сообщения

    private
    procedure OnCopyData(var AMessage:TWMCopyData); message WM_COPYDATA;
    public
    end;

    При повторном запусук сообщение второе отправляет мессагу но у первого никаких телодвижений не происходит.
    Где грабля.
  • Плохиш © (28.05.08 19:06) [9]

    > Handle:=FindWindow(nil, PAnsiChar('VBCSLauncherMainForm'));

    Фи, используй файл-маппинг.

    var
             FHandle: THandle;
             FBuffer: Pointer;
    begin
     FHandle := CreateFileMapping( $FFFFFFFF, nil, PAGE_READWRITE, 0,
                                   4, 'Ento ja' );
     FBuffer := MapViewOfFile( FHandle, FILE_MAP_WRITE, 0, 0, 4 );
     If Integer( FBuffer^ ) = 0 then
     begin
       Application.Initialize;
       Application.CreateForm(TMainForm, MainForm);
       // тут всяко разно...
       Integer( FBuffer^ ) := <сдесь засунем, к примеру, хэндл того, кому пошлём>;
       Application.Run;
      end;
     UnmapViewOfFile( FBuffer );
     CloseHandle(FHandle);
    end.

  • Still Swamp (28.05.08 19:35) [10]
    Если я правильно понял то WM_COPYDATA не вариант между двумя независимыми приложениями. Мессага доходит. Из структуры я адрес где был мой PChar и его размер выгребаю. Они совпадают. Но по этому адресу у второго приложения лежит фуфель какой то. Как я понимаю физически приложения работают в разных областях памяти.
  • МистерТ (28.05.08 19:50) [11]
    > Как я понимаю физически приложения работают в разных областях
    > памяти.

    Правильно понимаешь, строки не так посылаются.
  • Still Swamp (28.05.08 19:56) [12]
    Как послать строку?
    Хотя в прочем как послать хоть что нить. У меня доходит указанная структура, но я не могу прочитать ничего из того куда она указывает.

    Хотя в хелпе написано буквально следующее:

    WM_COPYDATA Message

    --------------------------------------------------------------------------------

    An application sends the WM_COPYDATA message to pass data to another application.
  • Юрий Зотов © (29.05.08 02:07) [13]
    > Still Swamp   (28.05.08 19:56) [12]
    > я не могу прочитать ничего из того куда она указывает.

    Значит, не так читаете. Почему бы не показать код чтения? Или будем гадать на кофейной гуще?
  • Юрий Зотов © (29.05.08 02:10) [14]
    Кстати, о птичках. Если при посылке оба параметра равны нулю (как в коде, который Вы привели), то ЧТО же посылается?

    Ничего. Соответственно, и прочитать ничего нельзя. Нечего читать-то.
  • Palladin © (29.05.08 07:51) [15]

    > Still Swamp   (28.05.08 19:56) [12]

    и все чтоли? больше ничего в хелпе не написано? или ты больше ниасилил?
Есть новые Нет новых   [134491   +8][b:0][p:0.001]