コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Module.cs プロジェクト: peterhuene/wasmtime.net
        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);
        }
コード例 #3
0
ファイル: Module.cs プロジェクト: zeta1999/wasmtime
        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);
        }