![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с DLL. Метод Assign не хочет выполняться.. :(
Гас © (2002-07-16 10:01:00)Вот в первый раз решил поработать с DLL, все классно получалось, пока не попробовал сделать FFont.Assign(DLLReturnsFont).
Не хочет выполняться!
Пишет "Cannot assign TFont to a TFont".
В чем дело, кто-нибудь знает? Спасибо.
Skier (2002-07-16 12:04:00) [21]>Гас
> Но пока не знаю как все-таки передать свойства фонта из
> DLL
Тебе обязательно нужен именно такой подход ?
Гас (2002-07-16 11:58:00) [22]Спасибо за внимание, я тут покопал немножко и уже понял, что не так все просто. Но пока не знаю как все-таки передать свойства фонта из DLL. Да и вообще, как передавать объекты?..
Игорь Шевченко (2002-07-16 10:57:00) [23]Font в DLL и Font в EXE имеют разные адреса RTTI, поэтому оператор Is не сработает.
Eugene Lachinov (2002-07-16 10:42:00) [24]Тут наверно, надо разбираться с реализацией Source is TFont :-), и вообще is
reonid (2002-07-16 10:40:00) [25]Assign обычно работает через RTTI -
проверяет Source с помощью is/as.
А класс TFont в основном приложении и в DLL - разные классы,
(хотя и идентичные).
Поэтому обычно классы из DLL не экспортируют.
Digitman (2002-07-16 10:33:00) [26]
procedure TPersistent.Assign(Source: TPersistent);
begin
if Source <> nil then Source.AssignTo(Self) else AssignError(nil);
end;
procedure TPersistent.AssignError(Source: TPersistent);
var
SourceName: string;
begin
if Source <> nil then
SourceName := Source.ClassName else
SourceName := "nil";
raise EConvertError.CreateResFmt(@SAssignError, [SourceName, ClassName]);
end;
Отсюда очевидно, что DLLReturnsFont у тебя по какой-то причине равен nil