Пытаюсь написать обертку sciter-x.dll для Delphi.
Сейчас столкнулся с проблемой регистрации native классов.
Создаю компонент. В конструкторе получаю Handle окна.
Затем вызываю
FSciterVM := SciterGetVM(Handle);
Затем цепляю callback и EventHandler.
И здесь же, в конструкторе вызываю метод Init, который выглядит следующим образом
procedure TSciterX.Init;
var
ma: array[0..1] of tiscript_method_def;
cd: tiscript_class_def;
begin
ma[0].name:=pansichar('test');
ma[0].handler:=@TestNativeMethod;
ma[1].name:=pansichar('this');
ma[1].handler:=@thisNativeMethod;
cd.name:=classini;
cd.methods:=@ma;
cd.props:=0;
cd.consts:=0;
cd.prototype:=0;
cd.finalizer:=finalize;
cd.get_item:=nil;
cd.set_item:=nil;
cd.iterator:=nil;
cd.on_gc_copy:=gc_copy;
ni.define_class(FSciterVM, @cd, 0);
end;
Если в методе Init вызвать метод native интерфейса eval
script:='var i = new ini(); i.test();';
ni.eval_string(FSciterVM,ni.get_current_ns(FSciterVM),pchar(script),length(script),@v)
функции TestNativeMethod и thisNativeMethod чудесно вызываются.
Проблема состоит в следующем: если после проделанных манипуляций я загружаю в sciter документ, то получаю
Project SciterTest.exe raised exception class $C0000005 with message 'access violation at 0x10001dcd: read of address 0x00000008'.
Без регистрации класса документ, естественно, загружается без ошибок.
В чем может быть проблема?