Вопрос DnSpy List in C++

Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2022
Сообщения
20
Реакции[?]
4
Поинты[?]
4K
К примеру в DnSpy используется:

public List<BossAddresses> BossList;

В сгенерированном il2cpp SDK:


void*& BossList()
{
return (void*)((char*)this + (~(~(-(-(1941192529 ^ 1266957520)) ^ 942670521))));
}

Обычно я меняю void на имя класса, но тут используется List

Вопрос: как работать с этим листом с помощью цикла (к примеру вывести bossId: myBossList[0].bossId)?
 
Пользователь
Статус
Оффлайн
Регистрация
20 Фев 2021
Сообщения
30
Реакции[?]
14
Поинты[?]
0
Слушай сюда, браток. Когда работаешь с этими штуками, вроде листов в il2cpp, надо знать пару фишек. У тебя тут код, который крутится вокруг List<BossAddresses>. Это значит, что твой лист — это список боссов, понимаешь?

Ты хочешь шерстить этот список, верно? Чтобы посмотреть, кто эти боссы. Ну, сначала ты должен превратить этот void* в что-то более осмысленное, понятное. В твоем случае, надо привести его к типу List<BossAddresses>* или как там у тебя класс называется.

Дальше, если ты хочешь пройтись по списку, используй цикл, например, for. Ты должен знать, сколько боссов у тебя в списке, чтобы правильно пройтись по ним. Вот как это может выглядеть на C++:

C++:
List<BossAddresses>* myBossList = (List<BossAddresses>*)BossList();

for (int i = 0; i < myBossList->Count; i++) {
    BossAddresses boss = myBossList->Items[i];
    cout << "bossId: " << boss.bossId << endl;
}
Тут myBossList->Count — это кол-во боссов в твоем списке, а myBossList->Items даст тебе доступ к каждому боссу поочередно. Только проверь, как точно в твоем SDK обращаться к элементам списка и их количеству, могут быть нюансы.
 
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2022
Сообщения
20
Реакции[?]
4
Поинты[?]
4K
Слушай сюда, браток. Когда работаешь с этими штуками, вроде листов в il2cpp, надо знать пару фишек. У тебя тут код, который крутится вокруг List<BossAddresses>. Это значит, что твой лист — это список боссов, понимаешь?

Ты хочешь шерстить этот список, верно? Чтобы посмотреть, кто эти боссы. Ну, сначала ты должен превратить этот void* в что-то более осмысленное, понятное. В твоем случае, надо привести его к типу List<BossAddresses>* или как там у тебя класс называется.

Дальше, если ты хочешь пройтись по списку, используй цикл, например, for. Ты должен знать, сколько боссов у тебя в списке, чтобы правильно пройтись по ним. Вот как это может выглядеть на C++:

C++:
List<BossAddresses>* myBossList = (List<BossAddresses>*)BossList();

for (int i = 0; i < myBossList->Count; i++) {
    BossAddresses boss = myBossList->Items[i];
    cout << "bossId: " << boss.bossId << endl;
}
Тут myBossList->Count — это кол-во боссов в твоем списке, а myBossList->Items даст тебе доступ к каждому боссу поочередно. Только проверь, как точно в твоем SDK обращаться к элементам списка и их количеству, могут быть нюансы.
Огромное спасибо за ответ, но к сожалению List работает только в C#, на C++ этого (вроде как) нет

List не является шаблоном / Идентификатор List не определен
Что-то подсказывает что тут нужно использовать std::vector, я пытался но не сработало, более опытный незнакомец сообщил что так не сработает, а в помощи отказал ;)
 
Сверху Снизу