0

C# で Pawn (言語) を使用することは可能ですか? 私はアプリケーションを持っており、Pawn を使用して変更/プラグインを作成することを他の人に提供したいと考えています。

JavaScript インタープリターのJintは見つかりましたが、Pawn 用の類似のライブラリーは見つかりませんでした。

4

1 に答える 1

1

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;
    }
}
于 2014-11-02T19:13:50.433 に答える