// 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); }
public static void InvokeJS(JSFunctionBinding signature, Span <JSMarshalerArgument> arguments) { InvokeJSImpl(signature.JSFunction !, arguments); }