internal Module(Interop.StoreHandle store, string name, byte[] bytes) { unsafe { fixed(byte *ptr = bytes) { Interop.wasm_byte_vec_t vec; vec.size = (UIntPtr)bytes.Length; vec.data = ptr; var error = Interop.wasmtime_module_new(store, ref vec, out var handle); if (error != IntPtr.Zero) { throw new WasmtimeException($"WebAssembly module '{name}' is not valid: {WasmtimeException.FromOwnedError(error).Message}"); } Handle = handle; } } Name = name; Imports = new Wasmtime.Imports.Imports(this); Exports = new Wasmtime.Exports.Exports(this); }
internal Module(Store store, string name, byte[] bytes) { if (store.Handle.IsInvalid) { throw new ArgumentNullException(nameof(store)); } var bytesHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned); try { unsafe { Interop.wasm_byte_vec_t vec; vec.size = (UIntPtr)bytes.Length; vec.data = (byte *)bytesHandle.AddrOfPinnedObject(); Handle = Interop.wasm_module_new(store.Handle, ref vec); } if (Handle.IsInvalid) { throw new WasmtimeException($"WebAssembly module '{name}' is not valid."); } } finally { bytesHandle.Free(); } Store = store; Name = name; Imports = new Wasmtime.Imports.Imports(this); Exports = new Wasmtime.Exports.Exports(this); }
internal Module(Store store, string name, byte[] bytes) { if (store.Handle.IsInvalid) { throw new ArgumentNullException(nameof(store)); } unsafe { fixed(byte *ptr = bytes) { Interop.wasm_byte_vec_t vec; vec.size = (UIntPtr)bytes.Length; vec.data = ptr; Handle = Interop.wasm_module_new(store.Handle, ref vec); } if (Handle.IsInvalid) { throw new WasmtimeException($"WebAssembly module '{name}' is not valid."); } } Store = store; Name = name; Imports = new Wasmtime.Imports.Imports(this); Exports = new Wasmtime.Exports.Exports(this); }