Все еще нужна помощь! Лучшее соответствие перегруженного метода для «XDevkit.IXboxDebugTarget.GetMemory(uint, uint, byte[], out uint)» имеет некоторые недопустимые аргументы [дубликаты]

Возможный дубликат:
Наилучшее соответствие перегруженного метода для «XDevkit.IXboxDebugTarget.GetMemory(uint, uint, byte[], out uint)» содержит недопустимые аргументы

Не уверен, почему за это проголосовали, мне просто нужна помощь. Я боролся с этим в течение нескольких часов, и я почти закончил, пожалуйста, если вам не нравится пост, просто продолжайте, не голосуйте за него, чтобы никто не мог его увидеть!

Хорошо, я гуглил и читал ответы и вопросы, подобные этому, навсегда, но не нашел объяснения, которое я могу понять для любой из этих проблем, которые у меня есть, я надеюсь, что кто-то здесь может помочь!

Ошибка 1: лучшее совпадение перегруженного метода для «XDevkit.IXboxDebugTarget.GetMemory (uint, uint, byte [], out uint)» имеет некоторые недопустимые аргументы.

Базовый код:

XDevkit.IXboxDebugTarget.GetMemory(uint, uint, byte[], out uint)

Что у меня есть НОВОЕ:

        uint num1;
        uint num2;
        uint num4;


        num1 = Convert.ToUInt32(textBox2.Text);
        num2 = Convert.ToUInt32(textBox3.Text);
        num4 = Convert.ToUInt32(textBox5.Text);
        byte[] num3;
        num3 = BitConverter.GetBytes(Convert.ToInt32(textBox3.Text));


        IXboxManager xbm = new XboxManager();
        IXboxConsole xbc = xbm.OpenConsole("textBox1.Text"); //Or Console Name in "" 
        IXboxDebugTarget xdt = xbc.DebugTarget;
        xdt.ConnectAsDebugger("XeDevMemPatcher", XboxDebugConnectFlags.Force); // this isn't always needed 
        IXboxDebugTarget.GetMemory(num1, num2, num3[], out num4);

    }

ИЗМЕНИТЬ текущие ошибки с этим кодом

1) Название «Кодировка» не существует в текущем контексте.

2) Лучшее соответствие перегруженного метода для «XDevkit.IXboxDebugTarget.GetMemory(uint, uint, byte[], out uint)» содержит недопустимые аргументы 2222.

3) Аргумент 3: невозможно преобразовать из «байт» в «байт []»

Итак, это, по-видимому, исключительно сбивает с толку, поскольку ничего из того, что я делаю в одиночку или на основе ответов, не работает, поэтому я просто опубликую здесь весь исходный код, чтобы вы, ребята, могли его просмотреть и, надеюсь, это поможет: извините, я не могу опубликовать изображение GUI, потому что мне не хватает REP, но, надеюсь, все будет хорошо:

с помощью системы; используя System.Windows.Forms;

пространство имен XDevkit { общедоступный частичный класс Form1 : Form { public Form1() { InitializeComponent(); }

    private void button1_Click(object sender, EventArgs e)
    {
        IXboxManager xbm = new XboxManager();
        //IXboxConsole xbc = xbm.OpenConsole(xbm.DefaultConsole); // dev 
        IXboxConsole xbc = xbm.OpenConsole("textBox1.Text");
        IXboxDebugTarget xdt = xbc.DebugTarget;
        xdt.ConnectAsDebugger("XeDevMemPatcher", XboxDebugConnectFlags.Force);

    }

    private void button2_Click(object sender, EventArgs e)
    {
    uint num1 = Convert.ToUInt32(textBox2.Text);
    uint num2 = Convert.ToUInt32(textBox3.Text);
    byte[] num3 = Encoding.ASCII.GetBytes(textBox4.Text);
    uint num4 = Convert.ToUInt32(textBox5.Text);
    int num5 = Convert.ToInt32(textBox4.Text);

// ...

    if (num3.Length > 1) 
    {    
        IXboxManager xbm = new XboxManager();
        IXboxConsole xbc = xbm.OpenConsole("textBox1.Text");
        IXboxDebugTarget xdt = xbc.DebugTarget;
        xdt.ConnectAsDebugger("XeDevMemPatcher", XboxDebugConnectFlags.Force);
        IXboxDebugTarget.GetMemory(num1, num2, num3[1], out num4);
}

    private void button3_Click(object sender, EventArgs e)
    {
        string a;
        a = "textBox6.Text";

        IXboxManager xbm = new XboxManager();
        IXboxConsole xbc = xbm.OpenConsole(textBox1.Text);
        IXboxConsole.ScreenShot(a)

    }
}

}


person user1205336    schedule 21.06.2012    source источник
comment
Сообщение об ошибке довольно ясное: num3 — это байт, так что же вообще означает num3[1]? Какого результата вы ожидаете?   -  person dlev    schedule 21.06.2012
comment
Я это знаю, но если вы посмотрите на базовый код, он требует байта и индексатора.   -  person user1205336    schedule 21.06.2012
comment
Ах я вижу. На самом деле он требует массив байтов, тогда как вы передаете один байт. Вы уверены, что правильно вызываете этот метод? Например, вы присваиваете значение num4, но num4 является параметром out, который гарантированно будет перезаписан методом.   -  person dlev    schedule 21.06.2012
comment
Нет, я не уверен, что он вызывается правильно, я переключился на использование решения Денниса Трауба для их вызова, но да, num4 должен быть перезаписан.   -  person user1205336    schedule 21.06.2012


Ответы (2)


Ошибка 1: num3 относится к типу byte, у которого нет индексатора.

Пример может работать, если вы изменили код следующим образом:

    uint num1 = Convert.ToUInt32(textBox2.Text);
    uint num2 = Convert.ToUInt32(textBox3.Text);
    byte[] num3 = Encoding.ASCII.GetBytes(textBox4.Text);
    uint num4 = Convert.ToUInt32(textBox5.Text);
    int num5 = Convert.ToInt32(textBox4.Text);

    // ...

    if (num3.Length > 1) {    
        IXboxManager xbm = new XboxManager();
        IXboxConsole xbc = xbm.OpenConsole("textBox1.Text");
        IXboxDebugTarget xdt = xbc.DebugTarget;
        xdt.ConnectAsDebugger("XeDevMemPatcher", XboxDebugConnectFlags.Force);
        IXboxDebugTarget.GetMemory(num1, num2, num3[1], out num4);
    }

Ошибка 2: IXboxConsole.ScreenShot — это метод экземпляра, а не метод класса (он же статический). Вы должны создать экземпляр, прежде чем сможете вызывать методы экземпляра:

IXboxManager xbm = new XboxManager();
IXboxConsole xbc = xbm.OpenConsole(textBox1.Text);
xbc.ScreenShot("screenshot");
person Dennis Traub    schedule 21.06.2012
comment
Да, я понял это, но что мне делать вместо этого, поскольку базовый код требует индексатора и не будет работать без него. - person user1205336; 21.06.2012
comment
Не зная базового кода или того, что вы пытаетесь сделать, способ решить проблему состоит в том, чтобы объявить num3 типом byte[] вместо byte. - person CodeHxr; 21.06.2012
comment
@user, базовый код не требует индексатора. Он вызывает массив. - person Kirk Woll; 21.06.2012
comment
@CodeHxr Я сказал вам базовый код в посте для обеих строк. - person user1205336; 21.06.2012
comment
@KirkWoll Что это значит? - person user1205336; 21.06.2012
comment
@user, массив байтов: var byteArray = new byte[5]; Индексатор: byteArray[1]. Это совершенно разные понятия, и метод использует первое, а не второе. - person Kirk Woll; 21.06.2012
comment
@Dennis Traub Этот код выдает ошибку: невозможно создать экземпляр абстрактного класса или интерфейса XDevkit.IXboxConsole. - person user1205336; 21.06.2012
comment
Тогда вам, вероятно, нужна конкретная реализация. Особенно, если IXboxConsole является интерфейсом, вы не сможете напрямую вызывать в нем методы. - person Dennis Traub; 21.06.2012
comment
@user1205336 user1205336 Это имеет смысл: в C#, если тип называется ISomething, он почти всегда указывает на интерфейс (который не может быть создан сам по себе). В общем, вам нужно создать новый объект, который реализует интерфейс, а затем вызовите метод для этого объекта. - person dlev; 21.06.2012
comment
@DennisTraub IXBOXCONSOLE — это интерфейс, что мне для этого нужно сделать? - person user1205336; 21.06.2012
comment
Как создать экземпляр для интерфейса IxboxConsole? - person user1205336; 21.06.2012
comment
@ user1205336 возможно, было бы полезно прочитать пару книг по объектно-ориентированному программированию. Тем не менее, я обновил свой ответ. - person Dennis Traub; 21.06.2012
comment
Вот что у меня сейчас есть: private void button3_Click(object sender, EventArgs e) { string a; а = текстовое поле6.Текст; IXboxManager xbm = новый XboxManager(); IXboxConsole xbc = xbm.OpenConsole(textBox1.Text); IXboxConsole.ScreenShot(a) Но это дает мне ошибку: Ошибка 4. Ссылка на объект требуется для нестатического поля, метода или свойства «XDevkit.IXboxConsole.ScreenShot(string)». Но я думал, что уже ссылался на объект ? Кроме того, где я могу найти полезную информацию об объектно-ориентированном программировании? - person user1205336; 21.06.2012
comment
Как я уже сказал, IXboxConsole.ScreenShot(a) не сработает. Вы должны вызвать метод для фактического объекта. Который у вас уже есть, это xbc. Попробуйте xbc.Screenshot(a). (У меня была ошибка в моем ответе, извините, если я вас там напутал, исправил) - person Dennis Traub; 21.06.2012
comment
Я ТЕБЯ ЛЮБЛЮ! исправил ошибку скриншота, я не читал эту часть вашего комментария, большое спасибо за это, также я разместил свой источник, так что, возможно, это немного поможет в работе с байтовым массивом. - person user1205336; 21.06.2012

Это довольно ясно из сообщения об ошибке. num3 не является массивом байтов, поэтому вы не можете получить к нему доступ с помощью индекса массива. Вам нужно будет преобразовать textbox3.Text в массив байтов, если вы хотите получить к нему доступ, как хотите. Вы не предоставили нам эту информацию.

Редактировать:

Если вы хотите преобразовать значение в текстовом поле в массив байтов, вы можете сделать следующее:

byte[] num3 = BitConvert.GetBytes(Convert.ToInt32(textBox3.Text));

Затем вы можете получить доступ к num3[1] по желанию (при условии, что длина массива не меньше 1).

person Bryan Crosby    schedule 21.06.2012
comment
Какая конкретно информация вам нужна? - person user1205336; 21.06.2012
comment
Любое значение, которое у вас есть в textBox3.Text, должно быть массивом байтов, а не байтом. - person Bryan Crosby; 21.06.2012
comment
@ Bryan Crosby Как мне преобразовать текст в массив байтов? - person user1205336; 21.06.2012
comment
@ user1205336: Вы можете использовать приведенное выше редактирование для преобразования в массив байтов. - person Bryan Crosby; 21.06.2012
comment
Я пробовал это, по какой-то причине это все еще дает мне ошибки, это настоящая боль :/ - person user1205336; 21.06.2012
comment
@user1205336 user1205336: Ваши проблемы теперь не обсуждаются. Пожалуйста, создайте новый вопрос. - person Bryan Crosby; 21.06.2012