Callmethod

отредактировано 19:00 Раздел: FastReport 4.0
Всем доброго времени суток!

Пытаюсь зарегестрировать метод, в ответ получаю ошибку:

Application Error
Exception EAccessViolation in module Test.exe at 005D513C.

Access violation at address 009D513C in module 'Test.exe'. Write of address 00000004.
ОК

Ошибка возникает в этом месте:
procedure TfsClassVariable.AddMethod(const Syntax: String; CallEvent: TfsCallMethodNewEvent);
var
  m: TfsMethodHelper;
begin
  m := TfsMethodHelper.Create(Syntax, FProgram); // <-- Здесь ошибка
  m.FOnCallNew := CallEvent;
  m.FClassRef := FClassRef;
  FMembers.Add(m);
end;

Код программы:
unit ufrxValueListEditorRTTI;

interface

uses fs_iinterpreter, ufrxValueListEditor, frxClassRTTI,Windows, Classes, SysUtils;

type
TFunctions = class(TfsRTTIModule)
private
   function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant;
public
   constructor Create(AScript: TfsScript); override;
end;

implementation

constructor TFunctions.Create(AScript: TfsScript);
begin
inherited Create(AScript);
with AScript do
begin
   { регистрируем класс и указываем, кто является его родителем }
   AddClass(TfrxValueListEditor, 'TfrxDialogControl');

   with AddClass(TfrxValueListEditor, 'TfrxDialogControl') do begin
     AddMethod('procedure InsertRow(KeyName,Value : String)', CallMethod);
   end;

end;
end;

function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
  const MethodName: String; Caller: TfsMethodHelper): Variant;
begin
  if MethodName = 'InsertRow' then
   TfrxValueListEditor(instance).InsertRow(Caller.Params[0],Caller.Params[1]);
end;

initialization
fsRTTIModules.Add(TFunctions);
end.

Что делаю не так??? Весь день провозился так и не понял :)

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

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