Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.058 c
4-1136740034
Microsom
2006-01-08 20:07
2006.03.26
Delphi &amp; ADSI (ActiveDirectory)


15-1140936277
Fedotof
2006-02-26 09:44
2006.03.26
Где скачать прогу?


15-1141040158
DesertAlex
2006-02-27 14:35
2006.03.26
Важно! Вопрос не по программированию. Delphi или VB?


15-1141388059
konda
2006-03-03 15:14
2006.03.26
3D-образы покинули пределы мониторов


2-1141644435
Junior1
2006-03-06 14:27
2006.03.26
Прочитать файл в массив