-
Мне непонятно следующее: Мне что - для решения проблемы надо использовать пакеты, таская за собой рантаймы?
Или же необходимо пользоваться методами ClassName и ClassNameIs и далее приведением типов в стиле TForm(FindedResult)?
Или оба эти варианта имеют право на жизнь, но каждый хорош по-своему?
-
> Или оба эти варианта имеют право на жизнь, но каждый хорош > по-своему?
Оба я же уже говорил.
-
Правда вариант с f:=TForm(Application.Components[i]); он, как бы сказать, не совсем корректен, но работать будет.
-
А почему он не совсем корректен?
-
> А почему он не совсем корректен?
Ну, дело в том, что приводятся один к другому совершенно разные классы. Но так как по внутреннему устройству они абсолютно одинаковы, то приведение возможно. В общем случае может оказаться, что классы будут различны - тогда возникнет ошибка приведения. Такое возможно, имхо, если dll делалась на одной версии Delphi, а основное приложение в другой.
-
Ага, понятно.
-
> DVM © (19.01.08 17:44) [24] > > > > А почему он не совсем корректен? > > Ну, дело в том, что приводятся один к другому совершенно > разные классы. Но так как по внутреннему устройству они > абсолютно одинаковы, то приведение возможно. В общем случае > может оказаться, что классы будут различны - тогда возникнет > ошибка приведения. Такое возможно, имхо, если dll делалась > на одной версии Delphi, а основное приложение в другой.
Одна или разные версии Delphi - это не важно. В любом случае даже одинаковые классы в приложении и DLL при компиляции в одной и той же версии Delphi, будут различными (VMT, в частности, у каждого будет своя), то в результате проверка через is/as даст отрицательный результат. Если компилировать с пакетами (но версия, естественно, должна быть одной и той же), тогда результат уже будет положительным.
-
> Amoeba ©
Это все само собой. Я не совсем о том. Я о приведении. От версии к версии, например, у того же класса TForm могут появиться дополнительные новые методы или свойства. Если приложение компилируется в старой версии делфи, а длл в новой, то при попытке приведения из в длл переданного в ее процедуру указателя к типу TForm и последующем вызове какого либо метода может получиться ошибка. А в случае одной и той же версии делфи ошибки может и не быть.
-
можно попробовать вместо is проверять ClassName например...
-
> MetalFan ©
посмотри внимательно код в [0]
|