Skip to content

API Host ClrMarshaller

Liu.Yandong.Hanks edited this page Aug 19, 2026 · 3 revisions

ClrMarshaller

CLR 与脚本值转换

Conversion between CLR and script values

.NET Host API 目录

.NET Host API Directory

概述

Overview

ClrMarshaller 提供显式边界转换。当 API 已经接收 ScriptDatum 时优先传递 Datum,避免不必要的对象包装与反转换。

ClrMarshaller provides explicit boundary conversion. When an API already accepts ScriptDatum, pass the datum directly to avoid unnecessary object wrapping and conversion back.

ToDatum(value) / WriteToDatum(ref datum, value)

Parameters:

  • value
    CLR 值。

    CLR value.

  • datum
    接收写入的 Datum。

    Datum receiving the write.

Returns

ToDatum 返回转换结果;WriteToDatum 无返回。

ToDatum returns converted value; WriteToDatum returns none.

var datum = ClrMarshaller.ToDatum(new[] { 1, 2, 3 });
ClrMarshaller.WriteToDatum(ref datum, "Aurora");

ToDatums(values)

Parameters:

  • values
    object[]ScriptObject[]

    object[] or ScriptObject[].

Returns

ScriptDatum[]

ScriptDatum[].

var arguments = ClrMarshaller.ToDatums(new object[] { 20, 22 });
var result = domain.Execute("MAIN", "add", arguments);

ToScript(value)

Parameters:

  • value
    CLR 值。

    CLR value.

Returns

可供脚本使用的 ScriptObject

ScriptObject usable by scripts.

var scriptValue = ClrMarshaller.ToScript(new { Name = "Aurora" });

TryConvertArgument(value, targetType, out result)

Parameters:

  • value
    ScriptObjectScriptDatum

    ScriptObject or ScriptDatum.

  • targetType
    所需 CLR 类型。

    Requested CLR type.

  • result
    接收转换结果。

    Receives conversion result.

Returns

转换是否成功。

Whether conversion succeeded.

var value = ScriptDatum.FromNumber(42);
if (ClrMarshaller.TryConvertArgument(value, typeof(int), out var result))
{
    Console.WriteLine((int)result);
}

Clone this wiki locally