![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FreeLibrary [D7, Win95/98, WinXP]
kblc © (2005-05-26 07:13:00)Уважаемые мастера, почему такая фигня происходит???
if p.Loaded then
begin
p.UpLoad;
if not p.UpLoaded then
Server[LOG_SERVER].ExecFunction('LOG '+format('"%s": невозможно выгрузить библиотеку (%s)',[Name,Copy(p.FileName,LastDelimiter('\',p.FileName)+1,length(p.FileName))]));
end;
p.Destroy;
....
end;
вот функция p.UpLoad:
procedure TLibrary.UpLoad;
begin
if Loaded then
begin
if Assigned(ExecFunction) then ExecFunction('STOP');
prUpLoaded:=FreeLibrary(LibHandle);
end else prUploaded:=true;
end;
функция выполняеться замечательно prUploaded = TRUE, но, как только переходим на след. строку
if not p.UpLoaded then
тоpкак такавое"Inaccesible Type"
Почему так получаеться?
kblc (2005-05-26 15:12:00) [1]к сожалению я не могу сейчас продолжать... продолжим завтра ...
всем бооольшое спасибо
правда
Digitman (2005-05-26 15:03:00) [2]
> функция ExecProcedure в библиотеке не успевает завершить
> свою работу
т.е. она реализует асинхронную логику ?... какого ж ... ты сразу об этом не упомянул ?)
ЧТО является признаком фактического (успешного или неуспешного) завершения работы алгоритма, инициированного к выполнению вызовом ExecProcedure() ?
kblc (2005-05-26 14:55:00) [3]я нашёл в чём ошибка...
я постоянно вызываю метод DispatchMsg не используя SendMessage().. это естественно, ведь у меня классы не имеют хэндла...
тут я сам наступил на грабли... у меня вызывался метод MainServer.Save который выгружал все dll, но(!!!) изучая я пришёл к выводу, что функция ExecProcedure в библиотеке не успевает завершить свою работу (т.к. клсвенно вызвала метод MainSercver.Save, который уже выгрузил её саму).
Как же мне тогда сделать так, что бы этого не повторялось?
Я засунул метод Save в таймер ... который срабатывает после 2 секунд после обработки сообщения метода DispatchMsg. Тепрь всё работает. Никаких ошибок.
Но я считаю что это неправильно.
Как же мне сделать "правильно"?
Digitman (2005-05-26 14:45:00) [4]
> kblc © (26.05.05 14:44) [53]
как минимум - при файловом вводе/выводе ..
kblc (2005-05-26 14:44:00) [5]когда появляеться вот такая ошибка?
EInOutError with message "I/O Error 103"
Digitman (2005-05-26 14:44:00) [6]например, привести сюда декларацию и реализацию метода DispatchMsg..
kblc (2005-05-26 14:41:00) [7]2 Digitman: проверил все декларации.
Всё полностью совпадает.
Что ещё я могу сделать?
Digitman (2005-05-26 14:32:00) [8]это значит что декларация п/п в вызывающем коде должна в точности соответствовать декларации той же п/п в вызываемом коде
kblc (2005-05-26 14:30:00) [9]Digitman, что значит "проверить соглашения в вызове"?
Digitman (2005-05-26 14:24:00) [10]для начала нужно проверить соглашения о вызове
kblc (2005-05-26 14:23:00) [11]2 Digitman: да, именно! я про это самое окно!...
тогда вопрос звучит так: как определить откуда она появляеться и что нужно делать что бы её не было???
Digitman (2005-05-26 14:17:00) [12]
> если это именено то окно дебуггера
что такое "окно дебуггера" ?
в этом окне - куча фреймов : фрейм секции кода, фрейм секции данных, фрейм секции стека, фрейм регистров CPU ...
если эти самые "одни знаки "?" ты видишь во фрейме секции кода, то это может означать: нарушение соглашений о вызове, загаживание тобой стека в теле вызванной п/п, дохрена чего еще может означать ..
kblc (2005-05-26 14:14:00) [13]раньше там просто было CanClose - заменить не успел
DigitMan, отгадай откуда этот брался CanClose ???
наверное из объекта класса!
Digitman (2005-05-26 14:12:00) [14]
> if not Self.CanCloseFirst then
в данномконтексте выделенное жирным выдает дилетанта)
это тоже не ОБС ?
kblc (2005-05-26 14:12:00) [15]блин... я и на F7 жал! ... да ёпрст... а что за асм код - да-не знаю.... если это именено то окно дебуггера где одни знаки "?" ???
kblc (2005-05-26 14:11:00) [16]2 DigitMan:
запостить весь код??? 58 КБ текста (всё вместе)???
Digitman (2005-05-26 14:10:00) [17]
> kblc © (26.05.05 14:08) [38]
а шут его знает, КАК ты "их" отлаживаешь)
вообще-то еще клавиша F7 есть ... и asm-код ...
Digitman (2005-05-26 14:09:00) [18]
> из-за чего?
да из-за чего угодно.
шматок кода он и есть шматок кода.
в отрыве от остального кода рассуждать о причинах не имеет смысла.
kblc (2005-05-26 14:09:00) [19]извиняюсь за ляп:
procedure TfmMainServer.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=Self.CanCloseFirst;
if not Self.CanClose Firstthen
begin
if not Visible then Visible:=true;
MainServer.Save;
tim_Saving.Interval:=CNST_TIMER_SAVE_INTERVAL; //2*1000
tim_Saving.Enabled:=true;
end;
end;
kblc (2005-05-26 14:08:00) [20]2 DigitMan:
Конечно знаком! а как по-твоему я их отлаживаю???