| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Опять проблемы с ДЛЛ |
| Автор: Fedor 6.11.2003, 09:23 |
| Исправил множество мелких и крупных глюков в подключенном мной ДЛЛ. Откомпилировал, и УРА!!! Ошибок нет... Но когда я запустил..... Выдается месага, что программа (моя) выполнила недопустимую операцию и будет закрыта Хелп плиз кто чем могет |
| Автор: Fedor 6.11.2003, 09:30 |
| Кстати, и еще... Можно ли в ДЛЛ использовать глобальные переменные и как они будут работать. Например: я, вызвав одну из функций ДЛЛ, задал значение глобальной переменной. после этого через некоторое время я вызвал другую функцию, которой требуются эти значения. Будут ли они сохранятся? Если нет, то как это можно обойти? |
| Автор: Pakshin A. S. 6.11.2003, 10:27 |
| 1) Проверь всю загрузку DLL и вызов её процедур; 2) Создай отдельный модуль в приложении; засунь туда все процедуры из DLL; отмени загрузку DLL и посмотри, что получится. Таким образом я иногда нахожу ошибки в процедурках DLL. Про переменную: Лучше храни её в приложении, т. е. запихни туда результат выполнения некой операции, а через некоторое время запусти операцию, передав ей в качестве параметра сохранённый результат. |
| Автор: stab 6.11.2003, 23:45 |
| можно отлаживать одновременно и DLL и программу её использующую: Run -> Pararmeters -> Host Application, может это спасет отца русской демократииииии |
| Автор: Fedor 7.11.2003, 09:00 | ||
Лучше конечно было бы хранить ее так, чтобы приложение "не знало" о ней... Вернее даже обязательно, чтобы эти переменные не зависили от конкретной ДЛЛ. Ведь если в приложение запихнуть переменные, то я не смогу использовать разные ДЛЛ на этом месте... Наверное никто ничего не понял из того что я сказал... |
| Автор: Fedor 7.11.2003, 09:04 |
| Кстати, еще вопрос... Можно ли подключать разные ДЛЛ в зависимости от некоторых параметров. Во всех ДЛЛ имена соответствующих функций одинаковы. Нпример, если мы выбрали в списке первый пункт, в юните используется 1.dll иначе - 2.dll |
| Автор: Akella 7.11.2003, 09:18 | ||
Конечно можно... |
| Автор: Fedor 7.11.2003, 09:33 | ||
Хорошо... Переформулирую вопрос: КАК |
| Автор: Fedor 8.11.2003, 00:50 |
| Неужели никто неможет помочь? |
| Автор: stab 8.11.2003, 03:20 | ||||
Я так думаю, что тут не обойтись без LoadLibrary+GetProcAddress. Схема такая: есть модуль, скажем MyGenericDLL, следующей структуры:
код примерный, я даже не надеюсь, что он скомпиляется использовать, так:
|
| Автор: Akella 10.11.2003, 11:18 |
| Используй динамический метод загрузки DLL. что-то вроде этого (попозже посмотрю более конкретно) ... a: procedure (a: integer, b:string); ... implementation ... if c=25 then LoadLibrary('my.dll') else LoadLibrary('notmy.dll'); @a := GerProcAdres('my') //дальше работаем с процедурой |
| Автор: stab 10.11.2003, 11:47 | ||
достаточно посмотреть выше на один пост |
| Автор: Akella 11.11.2003, 10:18 | ||
To cully
Я такого пока не встречал, обязательно попробую. Или это ты написал чисто условно |
| Автор: stab 11.11.2003, 15:51 |
| условно, конечно |