Форум: "Начинающим";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];
ВнизПрога вылетает при подключениие dll в vista Найти похожие ветки
← →
agress0r © (2008-07-26 14:44) [0]Привет всем
Вот прогу написал с использованием своей dll. Все компилируется, но при вызове функций программа вылетает. Сначала искал у себя ошибки. Но когда функция стала типа result:= 2+2; то понял что глючу не я а Виста. Отсюда вопрос как в висте можно dll подключить? (проверил на xp, все работает)
← →
Loginov Dmitry © (2008-07-26 14:50) [1]> Отсюда вопрос как в висте можно dll подключить? (проверил
> на xp, все работает)
Очевидно, LoadLibrary(). Если не работает, то глючит DLL, а не виста.
Как функция объявлена в ЕХЕ и как она объявлена в DLL?
← →
agress0r © (2008-07-26 16:12) [2]Объявлены самым простым способом, работало всю жизнь пока на висту не сел:
в DLL: exports FunctionName() index 1;
в EXE: FunctionName();stdcall;external "filename.dll" index 1;
← →
{RASkov} © (2008-07-26 16:27) [3]> [2] agress0r © (26.07.08 16:12)
index оставлен вроде как для совместимости с 16 битными...
можно убрать его...
> stdcall
и "там" и "тут"? Т.е. и в dll и в exe
Подозрительно, что
> (проверил на xp, все работает)
Что-то тут не чисто :)
← →
Anatoly Podgoretsky © (2008-07-26 17:11) [4]> agress0r (26.07.2008 16:12:02) [2]
И после этого Виста виновата :-)
← →
agress0r © (2008-07-27 16:42) [5]Вот только сейчас время появилось снова разобраться с этим)
Теперь все грузится через 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 все работает
← →
sniknik © (2008-07-27 16:50) [6]> Может просто Delphi6 с вистой не совместима?
это скорее ты с программированием не совместим...
> Потому что как я уже писал в XP все работает
то что ты пишешь это одно, показанный же код это другое, он в XP без глюков работать не будет.
кому верить?
← →
Anatoly Podgoretsky © (2008-07-27 17:03) [7]> agress0r (27.07.2008 16:42:05) [5]
Пока это ты с Вистой не совместим.
← →
Сергей М. © (2008-07-27 18:35) [8]
> функция объявлена через stdcall (так как я где то прочитал)
А если бы ты где-то прочитал "объявить функцию через ж.", то так и объявил бы ?)
Голова она дана не только для того чтобы жевать, но иногда и думать, что, зачем, почему и для чего ты пишешь.
← →
Правильный$Вася (2008-07-27 20:24) [9]соглашение о вызовах должно быть именно соглашением, а не ультиматумом
а по-русски: если функция имеет, например, stdcall в dll, то и вызываться она должна так же, с stdcall
← →
Amoeba © (2008-07-28 01:05) [10]Если DLL может использоваться только в приложениях, написанных на Delphi, то использовать stdcall не имеет ни малейшего смысла.
← →
agress0r © (2008-07-28 13:15) [11]короче все с вами ясно... не хотите помогать. вместо string использовал PChar все заработало.
← →
Игорь Шевченко © (2008-07-28 13:18) [12]
> вместо string использовал PChar все заработало.
Это иллюзия
← →
Anatoly Podgoretsky © (2008-07-28 13:20) [13]Так у тебя еще и string и конечно комментарий, как положено правильному пацану выкинул не читая, поскольку нефиг
http://www.podgoretsky.com/OtherParts/DM/BadTips.aspx
← →
stas © (2008-07-28 17:07) [14]agress0r © (28.07.08 13:15) [11]
Интересно как же это могло на xp работать?
← →
Тын-Дын © (2008-07-28 18:24) [15]
> stas © (28.07.08 17:07) [14]
> agress0r © (28.07.08 13:15) [11] Интересно как же это
> могло на xp работать?
Так автор так ин е сказал, что "это" у него не работает.-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c