|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Исходный код функции на Delphi Код: pascal 1. 2. 3. 4. 5.
Объявление в Код: c# 1. 2.
На выходе получаю ошибку: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена. Что можно сделать чтобы это побороть? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 14:26 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Pavluha, а в Дельфийском то коде точно все правильно? Плюс, проверьте что разрядность библиотеки совпадает с разрядностью managed проекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 14:43 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Factorize, Код дельфийской функции я привел в посте выше. Все компилируется под одним 4 фреймворком для 32 разрядной платформы. Если все скомпилировать под 2 фреймворком, то все работает без проблем. Куда копать я уже не знаю совсем :( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 14:56 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Pavluha, Вы привели только часть кода. StatusBuf может быть неверно инициализирована. В свою очередь, неправильно инициализирована она может быть и по каким-то внешним причинам. Если дело не в этом, то я бы посмотрел в документации, какая разница в Pinvoke между .Net 2.x и 4.х, могли "правила игры" измениться. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 15:26 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Pavluha, может в вызове метода указать размерность int-а? Ну, например : public static extern int GetStatusNum(Int32 byte1); А вообще, Вы уверены, что массив StatusBuf инициализирован? Кроме того, зачем по воробьям из пушки палить, передавая в функцию тип Integer, когда достаточно будет просто byte? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 15:31 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Alex KuznetsovPavluha, может в вызове метода указать размерность int-а? Ну, например : public static extern int GetStatusNum(Int32 byte1); в .Net тип int всегда 32х битный. Не нужна тут никакая размерность. Alex KuznetsovКроме того, зачем по воробьям из пушки палить, передавая в функцию тип Integer, когда достаточно будет просто byte? Не советуйте человеку всякие методы написания извращенного кода. Типичный bad practice. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 15:36 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, Пробовал ставить Int16 и Int32, толку 0. Дело в том, что некоторые методы работают, а некоторые нет. Вообще непонятно с чем все связано. Просто беда ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 15:51 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Не подскажите почему в дебаге такая ошибка происходит на вызов этого Marshal.FreeHGlobal(pfield); Сама ошибка: This may be due to a corruption of the heap, which indicates a bug in METRO.exe or any of the DLLs it has loaded. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 17:03 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Вот добился я, что на моей машине все работает корректно, но толку. Пошел на 32 разрядную винду, запустил и все фатал полный. Что за х... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 17:06 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Factorize FactorizeAlex KuznetsovКроме того, зачем по воробьям из пушки палить, передавая в функцию тип Integer, когда достаточно будет просто byte? Не советуйте человеку всякие методы написания извращенного кода. Типичный bad practice.Поясните, пожалуйста, почему же это будет методом написания извращённого кода, и как Вы определили, что это "Типичный bad practice" ? Хочется узнать экспертное мнение. Хочется узнать ответ именно от Вас, а не отсылания в гугл и т.д. Может чего нового для себя открою. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 19:41 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
PavluhaНе подскажите почему в дебаге такая ошибка происходит на вызов этого Marshal.FreeHGlobal(pfield); Сама ошибка: This may be due to a corruption of the heap, which indicates a bug in METRO.exe or any of the DLLs it has loaded. не факт, что насрано имено в вызове GetStatusNum ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 19:59 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Изопропил, так метод то все возвращает, что нужно и посмле этого я хочу освободить ресурс. Вот код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 09:37 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Pavluha, причина где-то раньше или в _GetFldStr зы pstr не освобождается ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 09:45 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Изопропил, И вариантов решения нет что ли никаких? Если поставить вот такую строчку Код: c# 1.
, то ошибка на ней происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 09:48 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Pavluhaто ошибка на ней происходит. как выделяется память для результата в _GetFldStr ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 09:53 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Изопропил, Никак, код я привел. Я получаю ссылку, а потом маршалю этим методом Marshal.PtrToStringAnsi ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 09:54 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
PavluhaИзопропил, Никак, код я привел. Я получаю ссылку, а потом маршалю этим методом Marshal.PtrToStringAnsi не виду кода на дельфи ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 09:58 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Изопропил, тут я не могу помочь, библиотека не моя. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 10:03 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Pavluha, вызов _GetFldStr - первое обращение к библиотеке? память испорчена где-то раньше ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 10:15 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Изопропил, Нет не первый вызов, вызовы до этой команды уже были. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 10:24 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Pavluha, Были вызовы этого метода: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 10:30 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
PavluhaНет не первый вызов, вызовы до этой команды уже были. там и повреждения сделаны чудес не бывает для вызова _GetFldStr ручной маршаллиг излишен, достаточно [MarshalAs(UnmanagedType.LPStr)] string field подозреваю, что и в других вызовах много чего наворочено - оттуда и ошибки ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 10:31 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Изопропил, Я так делал раньше [MarshalAs(UnmanagedType.LPStr)] , но при такой реализации вылазила ошибка FatalExecutionEngineError: The runtime has encountered a fatal error. The address of the error was at 0x6f4293ba, on thread 0x22f0. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 10:59 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
до этого вызова ошибки сделаны ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 11:18 |
|
Попытка чтения или записи в защищенную память.
|
|||
---|---|---|---|
#18+
Изопропил, Нет, до этого момента ошибок нет. Я короче сделал так: Код: c# 1. 2. 3. 4.
теперь работает и у меня и на 32 разрядной, но я уверен ошибки периодически возникают Отсюда вопрос, чем это грозит? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2014, 11:36 |
|
|
start [/forum/topic.php?fid=20&msg=38647702&tid=1402825]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 457ms |
0 / 0 |