Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизDLL Найти похожие ветки
← →
fedpavel © (2006-03-10 15:32) [0]Доброго времени суток Мастера.
Подскажите пожалуйста: у меня при выгрузке DLL выскакивает ошибка память не может быть прочитана по адресу 0х0000000.
Загрузка DLL: динамическая
var
H:HWDR;
f_ReadDel:function:Boolean;stdcall;
...
...
...
begin
H:=LoadLibrary("katini.dll");
if H<>0 then begin
f_ReadDel:=GetProcAddress(H,"f_ReadDel");
end;и при деактивации формы пишу следующее
While FreeLibrary(H) do;
Заранее спасибо!
← →
Сергей М. © (2006-03-10 15:36) [1]Самое интересное - в потрохах этой DLL ...
← →
Sergey Masloff (2006-03-10 15:37) [2]>While FreeLibrary(H) do;
Что это?!
← →
Crash Coredump © (2006-03-10 15:39) [3]Sergey Masloff (10.03.06 15:37) [2]
> Что это?!
Цикл ?
← →
Sergey Masloff (2006-03-10 15:43) [4]Crash Coredump © (10.03.06 15:39) [3]
Что цикл понятно. Что ЭТОТ цикл делает автору понятно?
← →
Desdechado © (2006-03-10 15:46) [5]If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
← →
fedpavel © (2006-03-10 15:46) [6]В DLL-ке бонално:
function f_ReadDel:Boolean; stdcall;
begin
sFile:=ExtractFilePath(Application.ExeName)+"\katalog.ini";
if FileExists(sFile) then INI:=TIniFile.Create(sFile);
f_ReadDel:=StrToBool(INI.ReadString("Delite","DeliteInformation",""));
end;
← →
fedpavel © (2006-03-10 15:48) [7]Цикл убираю то же самое. У меня в начале было просто:
FreeLibrary(H)
← →
Сергей М. © (2006-03-10 15:50) [8]
> Sergey Masloff (10.03.06 15:43) [4]
> Что ЭТОТ цикл делает автору понятно?
Счетчик ссылок он таким образом пытается декрементировать до нуля (в предположении что LoadLibrary перед этим вызывалась заранее неизвестное число раз) с целью фактической выгрузки модуля
← →
Crash Coredump © (2006-03-10 15:52) [9]fedpavel © (10.03.06 15:46) [6]
А Ini.Free ?
← →
Сергей М. © (2006-03-10 15:55) [10]
> fedpavel © (10.03.06 15:32)
> при деактивации формы
Что есть "деактивация формы" ? Потеря фокуса или что ?
В какой момент LoadLibrary выполняется ?
← →
fedpavel © (2006-03-10 15:56) [11]прописа ini.free то же самое
← →
Сергей М. © (2006-03-10 15:58) [12]
> прописа ini.free то же самое
Немудрено.
Отсутствие ini.free ведет только к утечке памяти, но никак не к исключению при выгрузке.
← →
Leonid Troyanovsky © (2006-03-10 15:59) [13]
> Сергей М. © (10.03.06 15:36) [1]
> Самое интересное - в потрохах этой DLL ...
Там ничем не лучше, чем снаружи.
Самое интересное - это откуда берется маниакальное стремление
к впихиванию (возможно) работоспособного кода в библиотеки.
Уверен, что сколько-нибудь рационального объяснения ни у кого
из страждующих нет.
Так и хочется сказать: люди, одумайтесь - dll предназначены
вовсе не для этого - это тяжелое наследие мрачных времен, лучше
займитесь чем-нибудь полезным - изучайте COM, .NET, XML, играйте
в футбол или вышивайте крестиком.
--
Regards, LVT.
← →
fedpavel © (2006-03-10 15:59) [14]загрузка библиотеки происходит при активации формы.
пробовал выгружать и при закрытии формы.
Причем если библиотеку не закрывать, то сам проект закроет её замечательно, но если самому то... Просто открыть форму пользователь может неоднократно.
Хотя я сейчас попробую открыть библиотеку при загрузке главной формы...
← →
fedpavel © (2006-03-10 16:02) [15]Стремление берется из-за бонального: хочется понять как работать с DLL, а вот что впихивать туда это уже другой вопрос. Конечно код рабочий просто...
← →
olegus81 (2006-03-10 16:03) [16]sFile:=ExtractFilePath(Application.ExeName)+"\katalog.ini";
if FileExists(sFile) then INI:=TIniFile.Create(sFile);
f_ReadDel:=StrToBool(INI.ReadString("Delite","DeliteInformation",""));
ExtractFilePath(Application.ExeName)- Возвращает C:\project\my\ и Еще +"\katalog.ini" получаем C:\project\my\\katalog.ini такой файл не найден
FileExists(sFile) = false
объект INI не создан
обращение к пустой переменной = Любимая ошибка
и в DLL Application другой не из проекта а свой новый Дллошный
← →
Crash Coredump © (2006-03-10 16:03) [17]
> dll предназначены
> вовсе не для этого - это тяжелое наследие мрачных времен,
> лучше
> займитесь чем-нибудь полезным - изучайте COM, .NET
В COM и в .NET тоже Dll есть...
← →
Сергей М. © (2006-03-10 16:04) [18]
> fedpavel © (10.03.06 15:59) [14]
А в чем удовольствие грузить/выгружать модуль всякий раз при получении/потере формой фокуса ?
Мало ли сколько раз в секунду юзеру приспичит переключаться между открытыми окнами !
Загрузи модуль при создании формы, выгрузи при уничтожении ...
← →
fedpavel © (2006-03-10 16:09) [19]Всем большое СПАСИБО!!!
Я поместил в главную форму загрузку данной библиотеки и естественно прога сама выгружает её нормально, но есть одно но: мне не нравится что она будет занимать память, а пользователь может ведь туда даже и не заглянуть.
Ну что-нибудь придумаем!
Еще раз спасибо.
← →
Сергей М. © (2006-03-10 16:13) [20]
> мне не нравится что она будет занимать память
И правильно что не нравится.
Грузи модуль лишь при реальной необходимости его использования.
← →
Leonid Troyanovsky © (2006-03-10 16:14) [21]
> fedpavel © (10.03.06 16:02) [15]
> Стремление берется из-за бонального: хочется понять как
> работать с DLL, а вот что впихивать туда это уже другой
> вопрос.
Работают с dll обычным образом - читают SDK, описывают
монстроидальные структуры, и зажмурив глаза делают вызовы,
из всех сил стараясь не материться.
Про впихивание тоже все понятно: какие бы страшные структуры не
использовались, они сводятся к простым (всем-всем понятным) типам,
скажем, PCHAR, DWORD, BOOL etc, причем, буфер для этих монстров
обычно готовит вызывающая сторона, которая также задумывается
о соглашении о вызовах, манглировании и проч. прелестях.
Т.е., про такие вещи как классы, объекты, свойства, формы и т..д.,
лучше даже не вспоминать. Вот такая суровая правда о dll.
--
Regards, LVT.
← →
fedpavel © (2006-03-10 16:17) [22]
> Сергей М
Спасибо
← →
fedpavel © (2006-03-10 16:18) [23]
> Leonid Troyanovsky
Спасибо
← →
Leonid Troyanovsky © (2006-03-10 16:27) [24]
> Crash Coredump © (10.03.06 16:03) [17]
> В COM и в .NET тоже Dll есть...
Dll - dll рознь (дык, хоть bpl). Не в том вопрос.
Как, скажем, данное обсуждение. Так ли уж нужно было
засовывать эту форму в столь суровое место, чтобы с такими
приседаниями ее показать (а, возможно, не показать).
Надеюсь, что хоть модально покажут.
--
Regards, LVT.
← →
Crash Coredump © (2006-03-10 16:32) [25]
> Так ли уж нужно было
> засовывать эту форму в столь суровое место, чтобы с такими
> приседаниями ее показать (а, возможно, не показать).
А я по приведенному коду формы, засунутой куда-то, не увидел...Какое-то чтение из ini-файла и никакой формы.
← →
Leonid Troyanovsky © (2006-03-10 16:47) [26]
> Crash Coredump © (10.03.06 16:32) [25]
> А я по приведенному коду формы, засунутой куда-то, не увидел.
> ..Какое-то чтение из ini-файла и никакой формы.
А.. Я оказывается это пропустил в пол-глаза. Sorry.
Ну, все равно, sharemem и т.п. и т.д.
Ладно, думаю, fedpavel © меня извинит за ворчание,
все же, конец трудовой недели.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.059 c