我在这里为一个游戏机器人提供了这个循环,它需要一个 __try __except 以防止在注入代码时发生 insta-crash。但是,我收到错误消息: Cannot use __try in functions that require object unwinding fix
。
我查看了该函数内部的所有函数调用,其中没有一个包含嵌套的 __try __except ,而且我也在使用 /EHs 构建。
这是我的代码;
void bot::logic::loop()
{
while (true)
{
__try
{
if (bot::logic::should_close())
exit(33062);
om::refresh_minions();
if (local_player::is_threatened())
local_player::handle_threat();
if (local_player::is_in_turret())
{
utils::move_to_suitable_pos();
std::this_thread::sleep_for(12s);
}
object* localplayer = obj_local_player;
bot::logic::calculate_buys(localplayer->current_gold);
obj_manager* manager = (obj_manager*)(m_base + o_obj_manager);
for (int32_t i = 0; i < manager->highest_index; i++)
{
object* this_object = manager->ptrs[i];
if (this_object)
{
if (is_minion(this_object) == 3073)
if (local_player::object_is_enemy(this_object))
if (utils::is_object_mid(this_object))
if (is_alive(this_object) == TRUE)
utils::Log("all passed");
if (local_player::object_is_enemy(this_object) && utils::is_object_mid(this_object) && is_alive(this_object) == TRUE && is_minion(this_object) == 3073)
{
object* enemy_minion = this_object;
for (int i = 0; i < game::minion_maxed_index; i++)
{
bot::logic::moving_to_cs_loop(om_ally_minions[i].minion_object, enemy_minion);
bot::logic::csing_loop();
}
}
}
}
std::this_thread::sleep_for(100ms);
}
__except (EXCEPTION_EXECUTE_HANDLER) {};
}
}
谁能告诉我哪些对象“需要展开”以及如何防止此错误?
编辑:我发现错误发生在代码中;
if (is_minion(this_object) == 3073)
if (local_player::object_is_enemy(this_object))
if (utils::is_object_mid(this_object))
if (is_alive(this_object) == TRUE)
utils::Log("all passed");
原文由 siroot 发布,翻译遵循 CC BY-SA 4.0 许可协议
无论如何,我建议您将 try/except 中的代码移动到自己的函数中,然后调用它,这样堆栈展开就会发生在另一个函数中。
例如