Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Собственная реализация IDispatch   Найти похожие ветки 

 
Priest ©   (2006-12-27 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 ©   (2006-12-27 17:03) [1]


>  DispPars:=TDispParams(DispPars);


может

 DispPars:=TDispParams(Params) ?


 
Priest ©   (2006-12-28 09:39) [2]

Точно. Спасибо. Это МоделМейкер Код Эксплорер юзал, он и переименовал все параметры. Причём всё работало. А потом кое что менял и решил переименовать переменную...Вот и результат



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.059 c
15-1266874205
Юрий
2010-02-23 00:30
2010.08.27
С днем рождения ! 23 февраля 2010 вторник


15-1265149756
иксик
2010-02-03 01:29
2010.08.27
Не пытайтесь ничего понять


15-1267337984
Kerk
2010-02-28 09:19
2010.08.27
Некачественное выполнение госконтракта


15-1275550373
12
2010-06-03 11:32
2010.08.27
pascal.Напомните, пожалуйста, как там возвращать значение функции


2-1267110427
dkhristich
2010-02-25 18:07
2010.08.27
Как корректно прекратить поток?