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)。但是,无法在 lambda 代码中访问该值。

当您使用变量捕获( [&]() { ... } )时,无法将 lambda 代码转换为我需要调用 mono_add_internal_call 的 void *。

有人能想出解决这个问题的方法吗?

4

1 回答 1

-1

为什么不让 FindNative 返回函数指针并将其传递给 mono_add_internal_call?为什么需要 callNative 函数?我不能说不知道那个 3rd 方库。

可以这样想:函数指针是编译代码的地址。具有捕获功能的 lamda 不是静态的。这样的函数指针需要知道在哪里可以找到它所期望的“本机”变量。

您是否提前知道需要添加的所有功能?如果是这样,为什么不允许您的内部调用有一个带有本机方法索引的枚举参数?不过,这并不比手动导出它们好多少。

于 2015-02-03T04:38:58.373 回答