Конференция "Corba" » Собственная реализация IDispatch
 
  • Priest © (27.12.06 16:33) [0]
    Реализую интерфейс. Вот основные методы


    function TPxTest.GetIDsOfNames(const IID: TGUID; Names: Pointer;
     NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
    begin
     Result := S_OK;
     if SameText(PointerToString(Names), 'TestMethod') then
       SetDispIDs(DispIDs,-111)
     else
       Result := inherited GetIDsOfNames(IID, Names, NameCount, LocaleID, DispIDs);
    end;

    function TPxTest.Invoke(DispID: Integer; const IID: TGUID; LocaleID:
     Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer):
     HResult;
    var
    S: string;
    DispPars:TDispParams;
    begin
     Result := S_OK;
     if DispID = -111 then
       begin
        DispPars:=TDispParams(DispPars);
        if DispPars.cArgs = 1 then
           begin
             S:=DispPars.rgvarg^[0].bstrVal;
             S := TestMethod(S);
             SetVarResult(VarResult, S);
           end
         else
           Result := DISP_E_BADPARAMCOUNT;
       end //if DispID = 0 then
     else
       Result := inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr);
    end;



    На клиенте происходит вызов

    RDS:=CreateOleObject('xServer.MyServer');
    S:=Edit1.Text;
    Caption:=RDS.PxTestPluggin.TestMethod(S);



    Проблема в том, что в Invoke всегда DispPars.cArgs равно 0. В чём проблема?
  • tesseract © (27.12.06 17:03) [1]

    >  DispPars:=TDispParams(DispPars);


    может

     DispPars:=TDispParams(Params) ?
  • Priest © (28.12.06 09:39) [2]
    Точно. Спасибо. Это МоделМейкер Код Эксплорер юзал, он и переименовал все параметры. Причём всё работало. А потом кое что менял и решил переименовать переменную...Вот и результат
 
Конференция "Corba" » Собственная реализация IDispatch
Есть новые Нет новых   [134431   +9][b:0][p:0.001]