Андрей, добрый день! Хочу использовать Sciter в Nim.
proc setNativeFunctor*(v: var Value, nf: NativeFunctor) =
nfs.add(nf)
var tag = cast[pointer](nfs.len()-1)
assert ValueNativeFunctorSet(v.unsafeAddr, pinvoke, prelease, tag) == HV_OK
Здесь убрал все лишнее
proc pinvoke(tag: pointer;
argc: uint32;
argv: ptr Value;
retval: ptr Value) {.stdcall.} =
var s = "All good!"
var res = newValue(s) # так не работает
#var res = newValue(99955) # c таким значением ошибок нет
#res.convertToString()
ValueInit(retval)
var ws = newWideCString(s)
assert ValueFromString(retval, ws, ws.len.uint32, 0) == HV_OK # такой вариант тоже не проходит
#ValueCopy(retval, res.addr) # работает только, если res содержит числа
Падает где то в sciter.dll:
d:\Project\nsciter\handlers.nim(154) handlers
d:\Project\nsciter\sciter\sciter.nim(70) run
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Error: execution of an external program failed: 'd:\Project\nsciter\handlers.exe '
Может есть какие идеи? Свои уже закончились...
Соглашение о вызове у этих функций cdecl, а не stdcall.
После этого ошибки пропали, значения передаются корректно