示例#1
0
        // res type is first argument
        public static unsafe JSFunctionBinding GetMethodSignature(ReadOnlySpan <JSMarshalerType> types)
        {
            int argsCount = types.Length - 1;
            int size      = JSFunctionBinding.JSBindingHeader.JSMarshalerSignatureHeaderSize + ((argsCount + 2) * sizeof(JSFunctionBinding.JSBindingType));
            // this is never unallocated
            IntPtr buffer = Marshal.AllocHGlobal(size);

            var signature = new JSFunctionBinding
            {
                Header = (JSFunctionBinding.JSBindingHeader *)buffer,
                Sigs   = (JSFunctionBinding.JSBindingType *)(buffer + JSFunctionBinding.JSBindingHeader.JSMarshalerSignatureHeaderSize + (2 * sizeof(JSFunctionBinding.JSBindingType))),
            };

            signature.Version       = 1;
            signature.ArgumentCount = argsCount;
            signature.Exception     = JSMarshalerType.Exception._signatureType;
            signature.Result        = types[0]._signatureType;
            for (int i = 0; i < argsCount; i++)
            {
                signature.Sigs[i] = types[i + 1]._signatureType;
            }

            return(signature);
        }
示例#2
0
 public static void InvokeJS(JSFunctionBinding signature, Span <JSMarshalerArgument> arguments)
 {
     InvokeJSImpl(signature.JSFunction !, arguments);
 }