Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.039 c
11-1123192059
Thaddy
2005-08-05 01:47
2006.03.26
Propose small change to _Tobj to the Dacha man ;)


9-1126594429
WondeRu
2005-09-13 10:53
2006.03.26
OpenGL. Вывод одновременно растрового и векторного шрифтов. Как?


15-1141222463
Amerzone
2006-03-01 17:14
2006.03.26
Вопрос про возможности VS 2005


2-1142269570
alone
2006-03-13 20:06
2006.03.26
Система


15-1141652945
oldman
2006-03-06 16:49
2006.03.26
старый стал, теорию забывать стал...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский