Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 30.11.2020
Сообщений: 78

Не правильный адрес на структуру

29.12.2022, 12:56. Показов 2566. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день товарищи знатоки, столкнулся с такой проблемой, задача моей программы состоит в том, чтобы получить адрес на структуру, причём такой адрес чтобы можно было подключиться с другого приложения и в основной программе можно было изменить саму переменную. при запуске программы она мне выдаёт значение переменной p.mem = 846546216, а после мне выдаёт её адрес, но если я вбиваю этот адрес (переведённый с 10 в 16 есесно) допустим в чит энджин, то чит энджин показывает значение никак не 846546216, а какие-то левые динамические данные. Если попытаться найти вручную это значение (846546216), то он находит, и даже изменяет, моя программа это моментально показывает, но адрес отличается на
2FD070 меньше. Что делать, в чём я ошибся,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public struct Memmory
    {
        public int mem;
        public float mem1;
        public float mem11;
    }
 
 
static public void Structura()
        {
            
            Memmory p = new Memmory();
 
            unsafe
            {
                p.mem = 846546216;
                ulong ptr = (ulong)&p;
                MainWindow.Changes.Content = ptr;
                
            }
            while (true)
            {
                MainWindow.Settings.Content = p.mem;
                await Task.Delay(100);
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.12.2022, 12:56
Ответы с готовыми решениями:

Правильный айпи-адрес
Здравствуйте! Помогите, пожалуйста, с задачей, заваливается на некоторых тестах. Для того чтобы выходить в Интернет, каждому...

Считать из пары правильный адрес
Есть Dictionary<string,string> D;, в котором значения - адреса файлов вида "C:\f.dat\". При чтении строки значения из пары var...

Сделать правильный адрес для страниц в постраничной навигации
Здравствуйте! Столкнулся с такой проблемой, что не могу вывести правильные ссылки для страниц. Суть в том, что у меня есть страница с...

30
0 / 0 / 0
Регистрация: 30.11.2020
Сообщений: 78
30.12.2022, 19:15  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kolorotur Посмотреть сообщение
Рабочий код не интересен, т.к. он уже рабочий
Она работает только на консольном, а в wpf он работать не хочет. мне нужно чтобы он и на wpf сработал
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
30.12.2022, 20:13
Цитата Сообщение от DimKon Посмотреть сообщение
а в wpf он работать не хочет.
Как конкретно вы вызываете это метод?
Так?
C#
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    public partial class App
    {
        public App()
        {
            testic();
        }
 
        static public void testic()
        {
            struktura str = new struktura();
            str.kee = 1;
            unsafe 
            {
                ulong ptr = (ulong)&str;
                Console.WriteLine(ptr.ToString("X"));
 
            }
 
            while (true)
            {
                Console.WriteLine(str.kee);
                Console.WriteLine(str.kee1);
                Console.WriteLine(str.kee11);
                Thread.Sleep(1000);
            }
        }
    }
 
    public struct struktura
    {
        public int kee;
        public float kee1;
        public float kee11;
    }
Если нет, то дайте ПОЛНЫЙ код (XAML с Шарпа) относящийся к вопросу.
Сразу пишу я не компетентен в этом вопросу.
Но как написал kolorotur, дело не в коде метода, а в каком окружении он вызывается.
Поэтому могут иметь значения нюансы напрямую не относящиеся к коду метода.

Лучше всего если вы сделаете в Решении два проекта Консольный (рабочий) и WPF (нерабочий).
Зальёте это решение на GitHub и дадите ссылку.
Это позволит максимально быстро найти решение, если это возможно.

Со своей стороны, постараюсь дать вам пример реализации на файлах памяти.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
30.12.2022, 23:30
DimKon, пример реализации на MemoryMappedFile в архиве: TransferBetweenApplications.7z
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
31.12.2022, 15:16
Цитата Сообщение от DimKon Посмотреть сообщение
Она работает только на консольном, а в wpf он работать не хочет. мне нужно чтобы он и на wpf сработал
Если взять ваш код выше и использовать его в WPF, то все прекрасно работает.
Выше вы писали, что этот консольный код был как-то "адаптирован" к WPF в результате чего работать перестало — значит эти адаптации что-то сломали, но что это за адаптации нам неведомо, т.к. кода нет.
1
0 / 0 / 0
Регистрация: 30.11.2020
Сообщений: 78
02.01.2023, 18:22  [ТС]
kolorotur, Я не знаю, а можно его вам отдельно как то показать, не очень хочется огромным проектом раскидываться...
Ну или я новый проект создам, адаптирую и вам скину...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.01.2023, 19:58
DimKon, Выложите новый проект с минимальным кодом, демонстрирующим проблему.
0
0 / 0 / 0
Регистрация: 30.11.2020
Сообщений: 78
02.01.2023, 22:46  [ТС]
kolorotur,
Вложения
Тип файла: zip Programm.zip (59.4 Кб, 5 просмотров)
0
0 / 0 / 0
Регистрация: 30.11.2020
Сообщений: 78
02.01.2023, 22:54  [ТС]
kolorotur, Я сейчас проверил свою программу, и она заработала, но не на долго, спустя минуту значение в CE изменилось, а значит и адрес изменился. На скрине подтверждение
Миниатюры
Не правильный адрес на структуру  
0
0 / 0 / 0
Регистрация: 30.11.2020
Сообщений: 78
02.01.2023, 23:03  [ТС]
Но я до сих пор не могу понять, почему тут хоть как-то сработало, а на основном приложении не стартует, код просто в тупую перекопировал в новый проект, поменял просто лэйблы на правильные имена и всё заработало, не до конца, но что-то есть, теперь осталось разобраться почему он потом изменяется
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.01.2023, 20:22
Лучший ответ Сообщение было отмечено DimKon как решение

Решение

Цитата Сообщение от DimKon Посмотреть сообщение
она заработала, но не на долго, спустя минуту значение в CE изменилось, а значит и адрес изменился
Ну вполне ожидаемо — у вас же асинхронный метод, значит переменная будет жить в куче, а следовательно сборщик ее будет перемещать в памяти, т.к. экземпляр не закреплен.
В консольном приложении вместо await Task.Delay был Thread.Sleep, потому структура скорее всего жила в стеке, а не в куче, а память стека не перемещается.

Цитата Сообщение от DimKon Посмотреть сообщение
я до сих пор не могу понять, почему тут хоть как-то сработало, а на основном приложении не стартует
В основном приложении больше всякого разного происходит, следовательно сборка мусора выполняется чаще и в результате переменная быстрее "убегает" из изначального места в памяти.

Цитата Сообщение от DimKon Посмотреть сообщение
это используется для коммуникации через память для кернел и шарпа
Можно, конечно, попробовать извращаться с закреплением через всякие GCHandle или fixed pattern (в новых версиях языка), но раз у вас постоянно ведется работа с неуправляемой памятью, то, я думаю, лучше сразу выделить место под структуру в неуправляемой памяти и там его держать (туда сборщик не лазит — потому она и неуправляемая).
А как структуру эту память интерпретировать только тогда, когда оттуда нужно достать или поменять там значения.

Как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
static public async void testic()
{
    IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf<struktura>());
 
    unsafe
    {
        var str = (struktura*)ptr;
        str->kee = 12345;
    }
 
    while (true)
    {
        MainWindow.Adress.Content = $"Adress (10): {ptr} Adress (16): {(ulong)ptr:X2}";
        unsafe
        {
            var str = (struktura*)ptr;
            Value.Content = str->kee.ToString();
        }
        await Task.Delay(100);
    }
 
    Marshal.FreeHGlobal(ptr);
}
 
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct struktura
{
    public int kee;
    public float kee1;
    public float kee11;
}
В неуправляемый код передавайте ptr.
2
0 / 0 / 0
Регистрация: 30.11.2020
Сообщений: 78
03.01.2023, 21:53  [ТС]
kolorotur, уххх, чёт жёстко, но я сейчас попробую перекинуть в основное приложение, посмотрю что это и с чем его едят. А так, спасибо огромное за помощь

Добавлено через 21 минуту
kolorotur, Последний код что вы скинули сработал и на основной программе, спасибо вам огромное, говоря честно надо будет разобраться что вы написали, и понять как оно работает. Спасибо вам ещё раз!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2023, 21:53

Объявить структуру «Адрес»
Объявить структуру «Адрес» с такими полями: название населенного пункта и название улицы, реализованные в виде символьных строк; номер...

Объявить структуру «Адрес»
Объявить структуру «Адрес» с такими полями: название населенного пункта и название улицы, реализованные в виде символьных строк; номер...

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей выполняемой программы. 3. Вычислить...

Как захешировать структуру, содержащую ip-адрес и порт?
Добрый вечер всем. Есть некая структура в упрошенном виде: struct session { struct sockaddr local; struct sockaddr peer; }; ...

Как записать в переменную данные из структуры, а не адрес на структуру?
Подскажите пожалуйста, есть ли способ записать в переменную *char именно сами данные, а не адрес на структуру? Или где я ошибаюсь? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru