![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прога вылетает при подключениие 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?