mirror of
https://github.com/extism/extism.git
synced 2026-01-10 06:18:00 -05:00
- Removes the `ExtismContext` type from runtime and all SDKs - Removed SDK functions: `extism_context_new`, `extism_context_reset`, `extism_context_free` - All SDKs have been updated, but there are still some TODOs below - Removes `extism_plugin_update` - Plugins can no longer be updated - a new plugin should be created instead - Adds `extism_plugin_id` to uniquely identify plugins - Merges the `extism-runtime` and `extism` crates (there is no longer an `extism-runtime` crate) - Makes `extism::Manifest` an alias for `extism_manifest::Manifest` instead of a distinct type - Adds `MemoryHandle` type to SDKs to refer to blocks of Extism memory that can be accessed in host functions - Improves thread-safety of Plugins, adds C++ test to call a single plugin from multiple threads. - Expands wasmtime bounds to include 12.0
39 lines
1004 B
C#
39 lines
1004 B
C#
using Extism.Sdk;
|
|
using Extism.Sdk.Native;
|
|
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
var userData = Marshal.StringToHGlobalAnsi("Hello again!");
|
|
|
|
using var helloWorld = new HostFunction(
|
|
"hello_world",
|
|
"env",
|
|
new[] { ExtismValType.I64 },
|
|
new[] { ExtismValType.I64 },
|
|
userData,
|
|
HelloWorld);
|
|
|
|
void HelloWorld(CurrentPlugin plugin, Span<ExtismVal> inputs, Span<ExtismVal> outputs, nint data)
|
|
{
|
|
Console.WriteLine("Hello from .NET!");
|
|
|
|
var text = Marshal.PtrToStringAnsi(data);
|
|
Console.WriteLine(text);
|
|
|
|
var input = plugin.ReadString(new nint(inputs[0].v.i64));
|
|
Console.WriteLine($"Input: {input}");
|
|
|
|
outputs[0].v.i64 = plugin.WriteString(input);
|
|
}
|
|
|
|
var wasm = File.ReadAllBytes("./code-functions.wasm");
|
|
using var plugin = new Plugin(wasm, new[] { helloWorld }, withWasi: true);
|
|
|
|
var output = Encoding.UTF8.GetString(
|
|
plugin.CallFunction("count_vowels", Encoding.UTF8.GetBytes("Hello World!"))
|
|
);
|
|
|
|
Console.WriteLine($"Output: {output}");
|
|
|