我一直在关注这个例子,试图创建一个简单的 javascript 引擎,它可以像 zxcvbn 库一样执行 javascript。我以为我已经弄明白了,但样本的某些部分我不明白。具体来说,如何在不引起任何内存问题的情况下从 javascript 函数中获取值。
这是我创建的示例。 https://github.com/janmchan/ChakraCoreHostC-
它运行良好,但是当我在实际项目中使用它时,我经常遇到类似于下面描述的问题(访问冲突异常)的崩溃。
https://github.com/Microsoft/Chakra-Samples/issues/4
这是该问题的解决方案。但是,我不太了解样本的那部分。如果您运行示例,它只会返回脚本返回值的两倍。我什至不明白 runScriptDelegate 是如何被回调的。
Thanks for asking, and yes of course.
On a high level, most of the AV issues here come from that in the C# app, installed callbacks are not retained and got garbage collected before being invoked. For example, you create a function like this,
//JsNativeFunction callback
private static JavaScriptValue nativeFunction(JavaScriptValue callee, bool isConstructCall, JavaScriptValue[] arguments, ushort argumentCount, IntPtr callbackData)
{
//do something here
}
...
JsCreateFunction(nativeFunction, callbackData, func);
最佳答案
我想我已经通过查看 JavaScriptEngineSwitcher 解决了这个问题。据我了解,他们有一个 ScriptDispatcher 来处理线程。我还添加了一些类似的代码来添加和删除对参数的引用。我会回到这里确认这是否能长期解决问题。
2018-03-06 更新:这确实解决了我们的问题。这是我需要进行的更改示例。
存储库:https://github.com/janmchan/ChakraCoreHostC-
提交:https://github.com/janmchan/ChakraCoreHostC-/commit/da5810f8f559ebe8ce2c2e50cd8808dc91caa087
关于javascript - 在 Chakra Core 中,如何在不引起内存问题的情况下返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48338968/