0

次のようにモノに内部呼び出しを追加しようとしています:

void addCall(char *name, char *amx_name)
{
    AMX_NATIVE native = sampgdk::FindNative(name);

    void(*natcall)() = []()
    {
        //Can't access native here... :(
        callNative(native);
    };
    mono_add_internal_call(name, (void *)natcall);
}

内部呼び出しは、いくつかのデータ (ネイティブ AMX_NATIVE へのポインター) を使用してメソッドを呼び出す必要があります。ただし、ラムダ コード内で値にアクセスすることはできません。

変数キャプチャ ( [&]() { ... } ) を使用すると、ラムダ コードを void にキャストできません * これを mono_add_internal_call と呼ぶ必要があります。

誰かがこの問題を回避する方法を考えられますか?

4

1 に答える 1

-1

FindNative に関数ポインタを返して、それを mono_add_internal_call に渡してみませんか? callNative 関数が必要な理由 そのサードパーティのライブラリについて知らずに語ることはできません。

次のように考えてください。関数ポインターは COMPILED コードへのアドレスです。キャプチャ付きのラムダは静的ではありません。そのような関数ポインタは、それが予期している「ネイティブ」変数を見つける場所を知る必要があります。

事前に、追加する必要があるすべての機能を把握していますか? もしそうなら、内部呼び出しがネイティブメソッドのインデックスを持つ列挙型への引数を持つことを許可しないのはなぜですか? ただし、それらをすべて手動でエクスポートするよりもはるかに優れているわけではありません。

于 2015-02-03T04:38:58.373 に答える