Таким образом, может показаться, что Angelscript довольно несовместим с теми функциями, которые он мне позволяет выполнять. Я пытаюсь объявить глобальную функцию таким образом:
scrpEngine->RegisterGlobalFunction("float sin(float in)", asFUNCTION(sinCallback), asCALL_CDECL);
Моя функция обратного вызова sin (которая вызывает функцию sin, не беспокоясь о ее перегрузке) выглядит примерно так:
float sinCallback(float in) {
return sin(in);
}
Всякий раз, когда я компилирую скрипт, я получаю ошибки, а именно:
ERROR: System function (1:17) : Expected ')' or ','
ERROR: (0:0) : Failed in call to function 'RegisterGlobalFunction' with 'float sin(float in)' (Code: -10)
Проверяя документацию и заголовочные файлы, этот код ошибки относится к неверному синтаксису. Однако синтаксис объявления функции определенно ДОЛЖЕН быть действительным. У кого-нибудь есть идеи?
Я думаю, что проблема заключается в подписи, с которой вы регистрируете свою функцию: float sin(float in)
,
Я предполагаю, что «in» должно быть именем параметра в соответствии с вашей функцией C ++, но AngelScript имеет in
/out
/inout
спецификаторы для ссылок, т.е. float sin(float &in)
,
Это может быть ошибкой или где-то задокументировано, что вы не можете использовать эти ключевые слова в качестве имен параметров функции.
Если вы просто измените имя параметра в подписи (никаких изменений в вашей функции обратного вызова не требуется) (например, float sin(float f)
) или бросьте его целиком (float sin(float)
, поскольку это не требуется в подписи вообще), ваша функция должна зарегистрироваться нормально.
Других решений пока нет …