是否可以在 C# 中使用 Pawn(语言)?我有一个应用程序,我想提供其他人使用 Pawn 编写修改/插件。
我找到了 JavaScript 解释器Jint,但我找不到任何类似的 Pawn 库。
您需要一个 AMX 机器库。首先,下载Pawn 工具包,然后从amx32.dll导入函数。阅读Pawn 实施者指南以获取文档。
我已经尝试过实现它一次,我宁愿推荐 Lua 用于其他脚本。有更多的文档。但如果你坚持使用 Pawn,以下是我的研究成果:
const string amxlib = "amx32.dll";
[DllImport(amxlib)]
private static extern int amx_Init(IntPtr amx, IntPtr program);
[DllImport(amxlib)]
private static extern int amx_Exec(IntPtr amx, IntPtr retval, int index);
[DllImport(amxlib)]
private static extern int amx_Exec(IntPtr amx, out int retval, int index);
[DllImport(amxlib)]
private static extern int amx_Register(IntPtr amx, [MarshalAs(UnmanagedType.LPArray)] AMXNativeInfo[] list, int count);
[DllImport(amxlib)]
private static extern int amx_Register(IntPtr amx, IntPtr list, int count);
[DllImport(amxlib)]
private static extern int amx_NumNatives(IntPtr amx, out int number);
[DllImport(amxlib)]
private static extern int amx_GetNative(IntPtr amx, int index, System.Text.StringBuilder name);
[DllImport(amxlib)]
private static extern int amx_NameLength(IntPtr amx, out int length);
public delegate int AMXNativeCall(IntPtr amx, IntPtr args);
[StructLayout(LayoutKind.Sequential)]
public struct AMXNativeInfo
{
[MarshalAs(UnmanagedType.LPStr)]
public string Name;
[MarshalAs(UnmanagedType.FunctionPtr)]
public AMXNativeCall Function;
public AMXNativeInfo(string name, AMXNativeCall func)
{
Name = name;
Function = func;
}
}