mono_add_internal_call с данными

Я пытаюсь добавить внутренние звонки в моно, как показано ниже:

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). Тем не менее, значение не может быть доступно в лямбда-код.

Когда вы используете захват переменной ([&] () {…}) лямбда-код не может быть приведен к пустоте *, которую мне нужно вызвать mono_add_internal_call.

Может кто-нибудь придумать способ обойти эту проблему?

0

Решение

Почему бы вам просто не заставить FindNative вернуть указатель на функцию и передать его в mono_add_internal_call? Зачем вам нужна функция callNative? Я не могу сказать, не зная об этой сторонней библиотеке.

Подумайте об этом так: указатели на функции — это адреса к скомпилированному коду. Лямда с захватом не стоит на месте. Такой указатель на функцию должен знать, где найти ожидаемую переменную.

Знаете ли вы все функции, которые вам нужно добавить, заблаговременно? Если так, почему бы не позволить вашему внутреннему вызову иметь аргумент для перечисления с индексом нативного метода? Это не намного лучше, чем экспортировать их вручную.

-1

Другие решения


По вопросам рекламы [email protected]