Форум: "Основная";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
ВнизВ чем разница? : M2 := TMemo(M1) и M2 := (M1 as TMemo)? Найти похожие ветки
← →
@Ujin (2003-07-17 15:12) [0]Если можно попопулярней! Заранее спосибо!
← →
AGAMEMNUM (2003-07-17 15:16) [1]а что тут непонятного? в перв случае создаешь еще одно мемо, по образу и подобию, во втором получаешь ссылку на то же мемо...
← →
Skier (2003-07-17 15:18) [2]>@Ujin © (17.07.03 15:12)
M2 := TMemo(M1) быстрее чем M2 := (M1 as TMemo) , поскольку
as производит проверку на допустимость кастинга, за
TMemo(M1) отвечает сам программист, поэтому обычно пишут
так :
if M1 is TMemo then begin
with TMemo(M1) begin //не as поскольку на TMemo уже проверено
//.......
end; //with
end;
← →
Palladin (2003-07-17 15:20) [3]хихи...
← →
@Ujin (2003-07-17 15:24) [4]Так, вот что странно:
делаю так:
Libs.AddObject("Идентефикатор", TLib.Init(<Имя файла>));
При таком обращении: (Libs.Objects[i] as TLib) - ОШИБКА,
а при таком: TLib(Libs.Objects[i][i]) все в порядке!
В чем тут беда?
← →
Palladin (2003-07-17 15:27) [5]а какая ошибка ?
а может (Libs.Objects[i][i] as TLib) тогда ?
← →
@Ujin (2003-07-17 15:29) [6]Не, там массива нет.
А ошибка RunTime 216
← →
Skier (2003-07-17 15:30) [7]>@Ujin
Я бы ответил так : ошибка видимо совсем не в приведении типов !
← →
Palladin (2003-07-17 15:32) [8]AV...
код обращения приведи, реальный
← →
@Ujin (2003-07-17 15:34) [9]function LibByName(const ALibName: string): TLib;
var idx: integer;
begin
idx := Libs.IndexOf(ALibName);
if idx <> -1 then Result := /b(Libs.Objects[idx] as TLib)
else Result := nil;
end;
← →
@Ujin (2003-07-17 15:35) [10]/b - тытался делать жирным :)
← →
Skier (2003-07-17 15:36) [11]>@Ujin
А чему у тебя равен Libs.Objects[idx] ?
Не nil случаем ?
← →
Palladin (2003-07-17 15:38) [12]а ошибку выдает в каком случае?
код вызова функции тоже приведи...
← →
@Ujin (2003-07-17 15:39) [13]procedure TryToUnloadAll;
var i: integer;
begin
i := 0;
while i < Libs.Count do begin
if LibRefCount(Libs[i]) = 0 then
TryToUnloadLib(Libs[i])
else kError;
inc(i);
end;
Unloader.Suspend;
end;
← →
@Ujin (2003-07-17 15:40) [14]Сори...
function TryToUnloadLib(const ALibName: string): boolean;
begin
Result := false;
if LibRefCount(ALibName) = 0 then begin
with LibByName(ALibName) do try
if Active then Result := Unload;
except
kError("?????? ??? ???????? ??????????: ""+ALibName+""");
end;
end;
end;
← →
Palladin (2003-07-17 15:43) [15]вот верхняя процедура интересна
попробуй
for i:=Libs.Count-1 downto 0 do
if LibRefCount(Libs[i]) = 0 then TryToUnloadLib(Libs[i])
else kError;
← →
Palladin (2003-07-17 15:45) [16]и я так понимаю это у тебя многопоточность...
ты безопасность работы с общими ресурсами соблюдаешь надеюсь?
← →
@Ujin (2003-07-17 15:46) [17]Есть казусы с Unloader = TThread. Я бы именно так и сделал...
← →
@Ujin (2003-07-17 15:47) [18]Как правила дорожного движения! :)
← →
@Ujin (2003-07-17 15:49) [19]Всем спосибо за участие - деньги заканчиваются!
← →
Palladin (2003-07-17 15:51) [20]ну тогда у тебя какой то из Objects в списке есть nil...
трассируй содержимое...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c