Конференция "WinAPI" » передать и принять несколько параметров [D7, WinXP]
 
  • Zalum (12.05.09 14:36) [0]
    Удалено модератором
    Примечание: Не устал ветки плодить?
  • Юрий Зотов © (12.05.09 14:56) [1]
    1. > как быть, если мне нужно передать несколько параметров

    Можно так, как Вы делаете, но если передаются параметры разных типов, то возникнут сложности с их выделением. В этом случае можно упаковать все параметры в массив байт (формат: тип, длина, тело...), а размер и адрес массива передавать через WM_COPYDATA.

    Тип - это число, например: 1 - Integer, 2 - Boolean, 3 - String и т.д.  

    2. > как тогда уже принятые значения разбросать по разным переменным

    Для массива байт - в цикле (while Position < Size):
    - читаем тип, берем соответсвующую переменную;
    - читаем длину (если тип не имеет фиксированную длину)
    - читаем тело

    Для строк - использовать комбинацию Pos + Copy + Delete, либо так:
    StringList.Text := строка_с_разделителями_#13#10
  • Zalum (12.05.09 15:09) [2]
    Нашел выход из ситуации, хотя может и коряво, но работает:

    передаю параметры:
    HForm := FindWindow(PChar('TMainForm'), 0);
        with ParamCmd do
        begin
          dwData := 0;
          cbdata := strlen(pchar(ParamStr(1)+#13+ParamStr(2)))+1;
          lpData := pchar(ParamStr(1)+#13+ParamStr(2) );
        end;
        SendMessage(HForm,WM_COPYDATA,application.Handle,Longint(@ParamCmd));



    принимаю

    procedure TMainForm.Getmessage(var msg: TWMCopyData);
    var
    stext:array[0..99] of Char;
    begin
    StrLCopy
    (stext,Msg.CopyDataStruct.lpData,Msg.CopyDataStruct.cbData) ;
     for i:=0 to  Length(stext) do begin
       if isDelimiter(#13,stext,i) then
       begin
         a1:=Copy(stext,0,i-1);
         a2:= Copy(stext,i+1,Length(stext));
       end;
     end;
     ShowMessage('первый:'+a1+'второй:'+a2);


    end;
 
Конференция "WinAPI" » передать и принять несколько параметров [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]