|
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
|
|||||||||||||||||||||
Вызов dll Delphi из C#30.01.2018, 16:59. Показов 3125. Ответов 13
Метки нет (Все метки)
Почему выскакивает ошибка An unhandled exception of type 'System.StackOverflowException'
если убрать один массив то все нормально но как только пишу три массива сразу ошибка
Ну вроде разобрался размер стека слишком мал его можно увеличить создав новый поток
0
|
|||||||||||||||||||||
| 30.01.2018, 16:59 | |
|
Ответы с готовыми решениями:
13
Вызов функции из DLL, написанной на Delphi Вызов dll на Delphi из C#
|
|
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
|
|
| 30.01.2018, 21:41 | |
|
А стек вызовов перед возбуждением исключения предоставить можешь?
0
|
|
|
.NET senior
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
|
||||||||||||||||
| 30.01.2018, 23:17 | ||||||||||||||||
|
xmaksasx, ларчик открывается очень просто - в Pascal индексы массивов находятся в тех границах, которые Вы самостоятельно им указываете (по умолчанию обе границы включаются в индекс, в качестве нижней границы устанавливается единица - это если следовать гайдлайнам).
Догадываетесь, к чему я веду? при указании
Вариантов решения проблемы три: 1. указать в Pascal для границ массива значения 1..50000 2. указать в Pascal для границ массива значения 0..49999 3. передавать из C# массивы длиной 50001 элемент Добавлено через 5 минут Код на Pascal
Код на C#
1
|
||||||||||||||||
|
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
|
||||||
| 31.01.2018, 09:50 [ТС] | ||||||
|
Интересно сейчас попробую, но к сожалению dll нет возможности исправить, потому как в работе используется dll написанная не мной, тут в куске кода я просто привел пример
Добавлено через 1 час 4 минуты
bax_tang, все равно вылетает Добавлено через 11 минут Странно что с dll которую я привожу для примера все работает нормально, а с dll которую мне прислали это не работает может попросить что бы там соглашение поменяли с stdcall на cdecl? я ради интереса пробовал изменить в своей dll соглашение на cdecl а в C# оставить stdcall выскакивает точно такая же ошибка.
0
|
||||||
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|||||||||||||||||
| 31.01.2018, 11:02 | |||||||||||||||||
|
Добавлено через 13 минут А ларчик, кстати, открывается еще проще, если я всё правильно помню. вот такие массивы в делфи передаются по значению
А во втором случае, на возврате сделает тоже самое, но размер стека уже достаточен, и проблемы не будет. Но будет эта самая разбалансировка - ведь вы передаете 12 байт аргументов через стек (размер указателя * 3), а функция ожидает намного больше. Что бы этого не было, писать надо так
0
|
|||||||||||||||||
|
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
|
|
| 31.01.2018, 11:13 [ТС] | |
|
jr_, может и так надо писать но нет возможности исправить dll не я ее писал, из исходного кода все что у меня есть я привел в примере
0
|
|
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 31.01.2018, 11:16 | |
|
а на dll можно глянуть ?
0
|
|
|
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
|
||||||
| 31.01.2018, 11:26 [ТС] | ||||||
|
jr_, сомневаюсь что это хоть как то облегчит задачу, там на вход 22 параметра
Добавлено через 3 минуты
0
|
||||||
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 31.01.2018, 13:54 | |
Сообщение было отмечено xmaksasx как решение
Решение
что то я видимо обманул про передачу по значению, всё немного по другому, но суть та же.
тут уже оказалось 22 параметра вместо 3х ![]() ![]() ![]() ![]() но всё равно что то не договариваете - в вашем определении процедуры всего 22 аргумента на 0x60 байт а в dll функция принимает 0x68 байт (судя по всему, 24 аргумента).
1
|
|
|
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
|
||||||
| 31.01.2018, 14:58 [ТС] | ||||||
|
jr_, этот кусок кода мне скинули как описание, может потому и ошибка выскакивает что передача параметров неверная
Добавлено через 52 минуты jr_, спасибо за помощь реально ошиблись в описании вот скинули правильный, как Вы и сказали 24 параметра
0
|
||||||
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 31.01.2018, 20:09 | |
|
xmaksasx, в дизасемблере глянул.
0
|
|
|
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
|
|
| 01.02.2018, 07:46 [ТС] | |
|
jr_, Ida подходит для этого?
0
|
|
|
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
|
|
| 01.02.2018, 10:56 | |
|
вполне
0
|
|
| 01.02.2018, 10:56 | |
|
Помогаю со студенческими работами здесь
14
Реализовать вызов dll, написанной на Delphi, в C++ Вызов функции из dll написанной на delphi из python
Inject dll, а также вызов функции из этой же dll Вызов Dll-фий в другой Dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|