![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
hvzh |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 18.10.2006 Репутация: нет Всего: 1 |
Доброе время суток!
У меня возникла проблема с вызовом функции из паскалевой DLL. Суть проблемы: имеется прога, написанная на VC++ и Delphi DLL, функции которой юзает сишная прога. В одной из паскалевых функций создается поток. Как только сишная прога вызывает эту функцию, происходит отвал. Вот пример тестовой проги:
Есть ли у кого идеи по поводу того, в чем может быть проблема. Любую дополнительную инфу за исключением паскалевых исходников могу предоставить. |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
что значит происходит отвал ???
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
hvzh |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 18.10.2006 Репутация: нет Всего: 1 |
Unhandled exception at 0x002a45f1 in SafeTest.exe: 0xC0000005: Access violation writing location 0x00000004. |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
приведи код паскаля этой функции и объявление этой функции для экспорта
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
hvzh |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 18.10.2006 Репутация: нет Всего: 1 |
Существует функция со следующим объявлением:
Последним шагом в ней - создание потока с использованием следующих функций:
Этот поток в данный момент ничего не выполняет, но ошибка при его создании тем не менее возникает |
||||||
|
|||||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
у тебя паскалевская функция экспортируется как __cdecl, а ты в сишной проге пытаешься ее импортировать как __stdcall, вот и получаешь свой эксепшн.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
hvzh |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 18.10.2006 Репутация: нет Всего: 1 |
Сорри, это рудимент, поскольку пробовались и __cdecl и __stdcall. На данный момент и там, и там __stdcall |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
тогда я не вижу паскалевского кода с функцией InitController
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
в принципе, можно отладить паскалевскую библиотеку и посмотреть, что там не так,
а вот по коду придерусь только пожалуй к этому: разве унаследованный TThread.Execute не поднимает исключение, может все же убрать эту строку? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
hvzh |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 18.10.2006 Репутация: нет Всего: 1 |
Вот полный кусок кода:
Слетает при вызове StartCheckStatusThread в функции OpenCOMPort |
||||
|
|||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Это жесткий код тоже, грохать поток вместо того чтобы корректно его завершить.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
hvzh |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 18.10.2006 Репутация: нет Всего: 1 |
Код паскалевый писал не я, доступа ко всему коду нет, так что отладиться не могу
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Тогда бессмыслено искать ошибки в закрытом коде
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
hvzh |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 18.10.2006 Репутация: нет Всего: 1 |
GremlinProg,
inherited убрал он, все равно Access violation |
|||
|
||||
Alca |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
VCL-вский метод класса TThread как раз это и делает, т.е. ставить флаг завершения работы потока (это не апишная функция ::TerminateThread). Название подобрано неудачно |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |