Пример #1
0
        public static string GetStringUtf8(JavaScriptValueSafeHandle stringHandle, bool releaseHandle = false)
        {
            bool stringHandleWasCreated = false;

            if (stringHandle == null || stringHandle == JavaScriptValueSafeHandle.Invalid)
            {
                throw new ArgumentNullException(nameof(stringHandle));
            }

            //Don't use our helper error class in order to prevent recursive errors.
            JsErrorCode innerError;

            //Get the size
            innerError = LibChakraCore.JsCopyString(stringHandle, null, 0, out ulong size);

            if ((int)size > int.MaxValue)
            {
                throw new OutOfMemoryException("Exceeded maximum string length.");
            }

            byte[] result = new byte[(int)size];
            innerError = LibChakraCore.JsCopyString(stringHandle, result, (ulong)result.Length, out ulong written);

            var strResult = Encoding.UTF8.GetString(result, 0, result.Length);

            if (stringHandleWasCreated || releaseHandle)
            {
                stringHandle.Dispose();
            }

            return(strResult);
        }