Почему функции должны быть разными в разных компиляторах, ... почему?
Хорошо, проблема заключалась в том, что Lua пытается преобразовать числа в double по умолчанию.Для этого он использует функцию "strtod", которая принимает 2 аргумента, строку и указатель на символ.Предполагается, что указатель на символ указывает на последнюю позицию после проанализированного номера.Что для шестнадцатеричного числа будет означать «х», после «0».Если это не так, Lua принимает ошибку и выдает нам это милое маленькое сообщение об ошибке.
Я скомпилировал Lua с использованием DMC, потому что мне нужно, чтобы lib была в OMF, и я предполагаю, что другиеиспользовал также DMC.Но очевидно, что strtod DMC работает иначе, так как указатели всегда указывают на начало строки, если это шестнадцатеричный код ... или, вернее, любое недопустимое число.
Я добавил небольшой хак, который проверяет наличиех, если преобразование в двойное не удалось.Не красиво, но пока работает нормально.
int luaO_str2d (const char *s, lua_Number *result) {
char *endptr;
*result = lua_str2number(s, &endptr);
/* Hack for DMC */
if (endptr == s)
if(*(s+1) == 'x' || *(s+1) == 'X')
endptr++;
else
return 0; /* conversion failed */