简体   繁体   English

如何在C#中使用Pawn

[英]How to use Pawn in C#

Is it possible, to use Pawn (language) in C#? 是否可以在C#中使用Pawn(语言)? I have an application and I would like to offer others to write modifications/plugins with Pawn. 我有一个应用程序,我想提供给其他人使用Pawn编写修改/插件。

I found JavaScript interpreter, Jint , but I can't find any similar library for Pawn. 我找到了JavaScript解释器Jint ,但是找不到与Pawn类似的库。

You need an AMX machine library. 您需要一个AMX机器库。 First, download the Pawn toolkit , then import the functions from the amx32.dll . 首先,下载Pawn工具包 ,然后从amx32.dll导入功能。 Read the Pawn Implementer Guide for the documentation. 阅读有关文档的《 Pawn实施者指南 》。

I've tried implementing it once, and I'd rather recommend Lua for additional scripts. 我曾经尝试实现它,而我建议使用Lua以获得其他脚本。 There is much more documentation for that. 有更多的文档。 But if you insist on using Pawn, here are the remains of my research: 但是,如果您坚持使用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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM