|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
Мне нужно отладить некоторые довольно сложные алгоритмы которые бегут в эмбедед системе. На таргете это делать неудобно и муторно а в шарпе GUI и все дела. В оригинальном коде я беру указатель переменной Код: c# 1. 2.
получаю значение по указателю Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
и записываю значению по указателю Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Как мне сэмулировать это на С-шарп? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 14:25 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
на строчке token.name[i++] = expr[exp_idx++]; ругается Error CS0200 Property or indexer 'string.this[int]' cannot be assigned to -- it is read only что ему не нравиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 15:00 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
Если это продолжение этой темы , то ты еще забыл упомянуть про union, которому в C# нет аналогов. ИМХО проще всего забыть про указатели и сделать с помощью BitConverter . ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 15:05 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
на строчке token.name[i++] = expr[exp_idx++]; ругается Error CS0200 Property or indexer 'string.this[int]' cannot be assigned to -- it is read only что ему не нравиться? string в C# только для чтения, нельзя там буквы менять. Используй массивы. PS Не самая хорошая идея в C# отлаживать С-ишный код. Как вариант может сделать DLL на С и вызывать её. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 15:13 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
Dima Tstring в C# только для чтения, нельзя там буквы менять. Используй массивы. Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 15:27 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
Dima Tjenya7 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
на строчке token.name[i++] = expr[exp_idx++]; ругается Error CS0200 Property or indexer 'string.this[int]' cannot be assigned to -- it is read only что ему не нравиться? string в C# только для чтения, нельзя там буквы менять. Используй массивы. PS Не самая хорошая идея в C# отлаживать С-ишный код. Как вариант может сделать DLL на С и вызывать её. спасибо. попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 15:27 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
Dima TЕсли это продолжение этой темы , то ты еще забыл упомянуть про union, которому в C# нет аналогов. Есть десантные войска и нет задач не выполнимых. Код: 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. 32. 33. 34. 35. 36.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 15:49 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
Зачем эмулировать, если есть просто unsafe код с указателями. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 15:56 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
fkthatЗачем эмулировать, если есть просто unsafe код с указателями. о! то что доктор прописал! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 16:32 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
fkthatЗачем эмулировать, если есть просто unsafe код с указателями. Error CS0227 Unsafe code may only appear if compiling with /unsafe ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 16:39 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7fkthatЗачем эмулировать, если есть просто unsafe код с указателями. Error CS0227 Unsafe code may only appear if compiling with /unsafe В гугле забанили? Error CS0227 В свойствах проекта поставь галку "Разрешить небезопасный код" ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 16:45 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
так работает - с локальной переменной Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
но если я подставляю глобальную переменную Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
получаю Error CS0212 You can only take the address of an unfixed expression inside of a fixed statement initializer ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 18:05 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7, Да, указатели можно использовать только внутри конструкции fixed . Потому что может в любой момент сработать мусорщик, переместить указуемый объект в другое место и указатель станет неправильным. Fixed на время запрещает мусорщику перемещать объект на который указывает указатель. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 18:18 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
fkthatjenya7, Да, указатели можно использовать только внутри конструкции fixed . Потому что может в любой момент сработать мусорщик, переместить указуемый объект в другое место и указатель станет неправильным. Fixed на время запрещает мусорщику перемещать объект на который указывает указатель. так работает Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 18:22 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
ЕвгенийВ Код: c# 1. 2. 3. 4. 5.
Так можно отстрелить себе ногу из-за "интернирования" строк. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 18:25 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7так работает Нет. Потому что "After the code in the statement is executed, any pinned variables are unpinned and subject to garbage collection. Therefore, do not point to those variables outside the fixed statement." Неплохо бы было, если бы компилятор отлавливал подобные ляпы (еще такой же типичный ляп - это вернуть из метода переменную объявленную в "using"), но он этого не умеет (хотя, вполне возможно, что какой-нибудь решарпер такое даже делает, но не пользуюсь, поэтому точно не знаю). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 18:43 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
fkthatjenya7так работает Нет. Потому что "After the code in the statement is executed, any pinned variables are unpinned and subject to garbage collection. Therefore, do not point to those variables outside the fixed statement." Неплохо бы было, если бы компилятор отлавливал подобные ляпы (еще такой же типичный ляп - это вернуть из метода переменную объявленную в "using"), но он этого не умеет (хотя, вполне возможно, что какой-нибудь решарпер такое даже делает, но не пользуюсь, поэтому точно не знаю). но после *ptr = 5; я вижу в Params.motor_rt_params[0].position - 5. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 18:52 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7но после *ptr = 5; я вижу в Params.motor_rt_params[0].position - 5. А в другой раз можешь увидеть вообще непонятно что, если мусорщик кучу уплотнит. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 19:42 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7но после *ptr = 5; ... Это можно написать в С/С++, хотя лучше union как я уже советовал, но не делай такого в C#. Это даже для С нездорово, но С это правильно поймет, а C# это совсем другой язык, тут так нельзя. Если можешь сделать DLL, то лучше сделай. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 20:00 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
кстати, для справки :) если открыть окно Memory 1 или 2,3,4 в строке адреса можно вводить адрес памяти в hex, можно вводить и имена переменных, методов и т.д. Всё это поддерживается и в QuickWatch и скорее всего в прочих окнах отладчика, с unsafe операторами для локальных переменных знач. типа (в стеке) &varName для переменной ссылочного типа на объект просто имя переменной varName. первые x байт в открывшейся области памяти, это TypeHandler, дальше кишки объекта в куче, не забываем, что если получить адрес переменной через &varName, это будет стек и смотреть надо наверх, а не вниз бывает полезно, но не особо, чтоб уж так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 20:30 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7, а что просто на плюсах проект не завести? и хоть заотлаживайся, вывод в консоль и вперёд ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 22:45 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
kealon(Ruslan)jenya7, а что просто на плюсах проект не завести? и хоть заотлаживайся, вывод в консоль и вперёд в плюсах нет оконных приложений. не понятно как визуальные компоненты добавлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 08:18 |
|
Эмуляция указателей в С-шарп
|
|||
---|---|---|---|
#18+
jenya7kealon(Ruslan)jenya7, а что просто на плюсах проект не завести? и хоть заотлаживайся, вывод в консоль и вперёд в плюсах нет оконных приложений. не понятно как визуальные компоненты добавлять.тогда дельфи))) Как ты совмещаешь несовместимое? ГУИ и низкоуровневое? Так не бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 08:32 |
|
|
start [/forum/topic.php?fid=20&msg=39816001&tid=1398937]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
126ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 239ms |
0 / 0 |