Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прога вылетает при подключениие dll в vista [D6]


agress0r ©   (2008-07-26 14:44:00) 

Привет всем
Вот прогу написал с использованием своей dll. Все компилируется, но при вызове функций программа вылетает. Сначала искал у себя ошибки. Но когда функция стала типа result:= 2+2; то понял что глючу не я а Виста. Отсюда вопрос как в висте можно dll подключить? (проверил на xp, все работает)


Тын-Дын   (2008-07-28 18:24:00) [1]


> stas ©   (28.07.08 17:07) [14]
> agress0r ©   (28.07.08 13:15) [11] Интересно как же это
> могло на xp работать?


Так автор так ин е сказал, что "это" у него не работает.-)


stas   (2008-07-28 17:07:00) [2]

agress0r ©   (28.07.08 13:15) [11]
Интересно как же это могло на xp работать?


Anatoly Podgoretsky   (2008-07-28 13:20:00) [3]

Так у тебя еще и string и конечно комментарий, как положено правильному пацану выкинул не читая, поскольку нефиг

http://www.podgoretsky.com/OtherParts/DM/BadTips.aspx


Игорь Шевченко   (2008-07-28 13:18:00) [4]


> вместо string использовал PChar все заработало.


Это иллюзия


agress0r   (2008-07-28 13:15:00) [5]

короче все с вами ясно... не хотите помогать. вместо string использовал PChar все заработало.


Amoeba   (2008-07-28 01:05:00) [6]

Если DLL может использоваться только в приложениях, написанных на Delphi, то использовать stdcall не имеет ни малейшего смысла.


Правильный$Вася   (2008-07-27 20:24:00) [7]

соглашение о вызовах должно быть именно соглашением, а не ультиматумом
а по-русски: если функция имеет, например, stdcall в dll, то и вызываться она должна так же, с stdcall


Сергей М.   (2008-07-27 18:35:00) [8]


> функция объявлена через stdcall (так как я где то прочитал)


А если бы ты где-то прочитал "объявить функцию через ж.", то так и объявил бы ?)

Голова она дана не только для того чтобы жевать, но иногда и думать, что, зачем, почему и для чего ты пишешь.


Anatoly Podgoretsky   (2008-07-27 17:03:00) [9]

> agress0r  (27.07.2008 16:42:05)  [5]

Пока это ты с Вистой не совместим.


sniknik   (2008-07-27 16:50:00) [10]

> Может просто Delphi6 с вистой не совместима?
это скорее ты с программированием не совместим...

> Потому что как я уже писал в XP все работает
то что ты пишешь это одно, показанный же код это другое, он в XP без глюков работать не будет.
кому верить?


agress0r   (2008-07-27 16:42:00) [11]

Вот только сейчас время появилось снова разобраться с этим)

Теперь все грузится через LoadLibrary

Но:
1) если в dll функция объявлена через stdcall (так как я где то прочитал), то     прога просто вылетает

2) если в dll функция объявлена без stdcall, то прога НЕ вылетает, функция срабатывает, но выдается сообщение 'Invalid Pointer Operation'

3) а дальше я вообще не понимаю:
когда я первый раз написал через loadlibrary, то забыл дописать FreeLibrary(...), а когда все таки дописал, то получилось аналогично пункту "2",
но вместо 'Invalid Pointer Operation' выдает
'Access violation at address xxx in module 'project1.exe'. Read of address yyy'

Может просто Delphi6 с вистой не совместима? Потому что как я уже писал в XP все работает


Anatoly Podgoretsky   (2008-07-26 17:11:00) [12]

> agress0r  (26.07.2008 16:12:02)  [2]

И после этого Виста виновата :-)


{RASkov}   (2008-07-26 16:27:00) [13]

> [2] agress0r ©   (26.07.08 16:12)

index оставлен вроде как для совместимости с 16 битными...
можно убрать его...

> stdcall

и "там" и "тут"? Т.е. и в dll и в exe
Подозрительно, что

> (проверил на xp, все работает)

Что-то тут не чисто :)


agress0r   (2008-07-26 16:12:00) [14]

Объявлены самым простым способом, работало всю жизнь пока на висту не сел:

в DLL: exports FunctionName() index 1;
в EXE: FunctionName();stdcall;external 'filename.dll' index 1;


Loginov Dmitry   (2008-07-26 14:50:00) [15]

> Отсюда вопрос как в висте можно dll подключить? (проверил
> на xp, все работает)


Очевидно, LoadLibrary(). Если не работает, то глючит DLL, а не виста.

Как функция объявлена в ЕХЕ и как она объявлена в DLL?


Наверх

Титульная страница Поиск, карта сайта Написать письмо