Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Не работает сравнение в DLL


Автор: Вася К. 30.11.2007, 10:14
Здраствуйте!

У меня есть 2 модуля ехе и dll. В dll есть процедура, в которой есть вот такая строчка:

Код

procedure CompareComp(Comp: TComponent);
begin
if Comp is TPanel then <---- вот это не срабатывает, даже если Comp  самый настоящий TPanel
  ShowMessage('Как прекрасен этот мир!');
end;


exports
              CompareComp;
begin
end.


Если вызвать эту процедуру из модуля ехе, то если Comp И в самом деле TPanel , ShowMessage (или еще что-то) не выполняется. Естественно, если делать это сравнение в модуле ехе, все получается. В чем тут прикол?

Автор: Alexeis 30.11.2007, 10:29
Вася К., в том, что объекты нельзя передавать в Dll. У Dll и exe разные экземпляры реализаций классов и разные RTTI. Так что тут без обмана Comp это класс exe TPanel, а он пытается его идентифицировать как dll TPanel. Некоторые используют недокументированные возможности пересылая указатели на все метакласы в Dll и всегда работают только с этими метаклассами, но насколько это переносимо и в будущем будет работать, неизвестно. 

Автор: MetalFan 30.11.2007, 11:59
используй пэкеджи (bpl).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)