Передача объектов в процедуре

отредактировано May 2006 Раздел: FastScript
Доброго дня!

Имеется метод
type
 TVector = class (TComponent)
 public
   procedure   Clone (VecSource: TVector);
 end;

The method Clone resizes the vector to the dimensions of vector VecSource and copies the entire contents of VecSource into its own data area (self).

Регистрирую так
With MainForm.fsScript1.AddClass(TVector,'TComponent') do
  AddMethod('procedure Clone(VecSource: TVector)',CallMethod);

Вызываем
function TMainForm.CallMethod(Instance: TObject; ClassType: TClass;
  const MethodName: String; var Params: Variant): Variant;
begin
 If MethodName='CLONE' then
    MainForm.TVector.Clone(Params[0]);
end;

И ругается на Params[0] так
Incopatible types: 'TVector' and 'Variant'

Вопрос извечен: что делать (как решить проблему)?
Спасибо!

Комментарии

  • LexXPLexXP Новокузнецк
    отредактировано 01:26
    Попробуй сделать так:
    function TMainForm.CallMethod(Instance: TObject; ClassType: TClass;
     const MethodName: String; var Params: Variant): Variant;
    begin
    If MethodName='CLONE' then
       MainForm.TVector.Clone(TVector(integer(Params[0])));
    end;
    
  • отредактировано May 2006
    Спасибо!
    Помогло.

    Следущий вопрос.
    У этого же типа есть метод
    procedure MeanVar (LowElem, HighElem: integer; var Mean, Variance: double)
    

    В переменных Mean, Variance: double возвращается результат метода.
    Будут ли правильными следующие действия?
    function TMainForm.CallMethod(Instance: TObject; ClassType: TClass;
     const MethodName: String; var Params: Variant): Variant;
    var
     b,d:double;
    begin
    If MethodName='MEANVAR' then
     begin 
      MainForm.TVector.MeanVar (Params[0], Params[1], b, d);
      Params[2]:=b;
      Params[3]:=d;
     end;
    end;
    

    Если сразу поставить MeanVar (Params[0], Params[1],Params[2],Params[3]), то ругается:
    Types of actual and formal var parameters must be identical ;)

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.