@always_drunkking

Как изменить переменную в длл другого приложения?

Есть вот такой код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

namespace delm
{
    
    
        public class DeleteAfterTime : MonoBehaviour
        {
            public Rect RT_MainMenu = new Rect(0f, 100f, 120f, 100f); //Rect это месторасположение меню по x,y и высота, ширина.
            public int ID_RTMainMenu = 0;
            public bool MainMenu = true;
            
            private void OnGUI()
            {
                if (this.MainMenu)
                {
                    this.RT_MainMenu = GUILayout.Window(this.ID_RTMainMenu, this.RT_MainMenu, new GUI.WindowFunction(this.Menu_MainMenu), "MainMenu", new GUILayoutOption[0]);
                }
            }
        private void Menu_MainMenu(int id) //Главное меню
        {
            if (GUILayout.Button("Set", new GUILayoutOption[0]))
            {
              maxForwardSpeed = 10f;  //Здесь код, который будет происходить при нажатии на эту кнопку
            }
        }
        private void Update() //Постоянно обновляемый метод, все что здесь будет написанно будет создаваться бесконечно
            {
                if (Input.GetKeyDown(KeyCode.V)) //Кнопка на которую будет открываться и закрываться меню, можно поставить другую
                {
                this.MainMenu = !this.MainMenu;
            }
            }
        }
    }

и лоадер, который инжектится в приложение на unity через sharp mono injector
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

namespace delm
{
        public class Loader
        {
            public static GameObject MainClass;

            // Token: 0x040000FE RID: 2543
            public static GameObject DrawPlayers;

            // Token: 0x040000FF RID: 255
            public static GameObject DrawVeh;

            // Token: 0x04000100 RID: 256
            public static GameObject TestAim;

            // Token: 0x04000101 RID: 257
            public static GameObject GuiClass;

            public static void Load()
            {
                Loader.MainClass = new GameObject("fl_Main");
                MainClass.AddComponent<DeleteAfterTime>();
                UnityEngine.Object.DontDestroyOnLoad(Loader.MainClass);
            }
        }
    }

в общем в игре нажимая на V появляется меню с кнопкой, при нажатии должна поменяться переменная которая находиться в Assembly-CSharp.dll, но программа не видит этой переменной, выдавая ошибку

Ошибка CS0103 Имя "maxForwardSpeed" не существует в текущем контексте.

ссылка на длл с этой переменной в проекте имеется, пытался прописать эту длл в using, но тогда появлялась ошибка

error CS8370: Компонент "инструкции верхнего уровня" недоступен в C# 7.3. Используйте версию языка 9.0 или выше.
  • Вопрос задан
  • 509 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
У тебя действительно нигде в коде нет переменной maxForwardSpeed, и как ты её собираешься менять - не понятно
UPD:
А если серьёзно:
// Вроде как _hasOffceKey - это приватное поле и публичного сеттера у него нет, да и сам класс может быть internal.
object thiefController /* = каким-то образом достаём экземпляр ThiefController */;
var fieldInfo = thiefController.GetType().GetField("_hasOfficeKey", BindingFlags.Instance | BindingFlags.NonPublic);
if(fieldInfo == null)
  throw new InvalidOperationException("Что-то пошло не так");
fieldInfo.SetValue(thiefController, true);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы