Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы при использовании интерфейсов 
V
    Опции темы
Aleks26
  Дата 9.4.2012, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Я смотрел в разных источниках примеры по использованию интерфейсов. Из книги Сухарева я взял приведенный там пример:
Код

unit unUsingInterfaces;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;


Type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;


 Interface1 = Interface
  procedure Int1Method;
 end;

 Interface2 = Interface
  Function Int2Method: Integer;
 end;

 InterfacedClass = Class(TObject, Interface1, Interface2)
  procedure Int1Method;
  Function Int2Method: Integer; virtual; abstract;
 end;


implementation

procedure InterfacedClass.Int1Method;
begin
 ShowMessage('Выполнен метод первого интерфейса.');
end;

Procedure UseInterface;

var
 Int: Interface1;
 IntClass: InterfacedClass;

begin
 IntClass := InterfacedClass.Create;
 Int := IntClass;
 Int.Int1Method;
 IntClass.Free;
end;

end.

Когда я запустил компиляцию, я получил ошибки, где говорится о  undeclared identifier с именами функций из IInterface: _AddRef, _Release и QueryInterface. Но ведь не указывая явно родительский интерфейс, интерфейс IInterface подразумевается автоматически? В чем  моя ошибка?  smile 
PM MAIL   Вверх
Чучмек
Дата 9.4.2012, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Вот именно, подразумевается, а TObject не реализует  _AddRef, _Release и QueryInterface.
Поэтому либо пиши реализацию этих методов в своем InterfacedClass  самостоятельно, либо используй TInterfacedObject


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
kami
Дата 9.4.2012, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Aleks26 @  9.4.2012,  17:06 Найти цитируемый пост)
 интерфейс IInterface подразумевается автоматически? 

Он-то подразумевается, но ведь интерфейсы "имеют" только заголовки методов, а не их реализацию. Вот и получается, что Delphi знает, что у класса, реализующего интерфейс Iunknown и /или IInterface должны быть методы _AddRef и т.д., а их нет. Вот и вылезает ошибка.

Вместо Tobject поставь TInterfacedObject.
PM MAIL WWW   Вверх
Aleks26
Дата 9.4.2012, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Большое спасибо. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.