Текущий архив: 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.44 MB
Время: 0.077 c