【问题标题】:How to use Pawn in C#如何在 C# 中使用 Pawn
【发布时间】:2014-11-03 03:13:50
【问题描述】:

是否可以在 C# 中使用 Pawn(语言)?我有一个应用程序,我想提供其他人使用 Pawn 编写修改/插件。

我找到了 JavaScript 解释器 Jint,但我找不到任何类似的 Pawn 库。

【问题讨论】:

  • 我不知道 Pawn。我什至没有听说过它,但我认为如果你可以从 Pawn 创建一个库 (DLL) 并导出它的函数,你可以在 C# 中调用它们。
  • function Pawn(Person p, Valuable v){p.Inventory.Remove(v); p.Cash+=v.Value/10;}

标签: c# pawn


【解决方案1】:

您需要一个 AMX 机器库。首先,下载Pawn toolkit,然后从amx32.dll中导入函数。阅读Pawn Implementer Guide 获取文档。

我已经尝试过实现它一次,我更愿意推荐 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;
    }
}

【讨论】:

    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2019-03-02
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多