Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2008, 10:25   #1
MaZaHaKa
Новичок
Джуниор
 
Регистрация: 04.04.2007
Сообщений: 1
По умолчанию Интерфейсы

Здравствуйте!
Возникла такая проблема!

(test.dll)

Код:
  ITest = interface
  ['{995D3A5B-5E9F-47FE-AF59-EDB60FD2B061}']
    procedure SetValue(Value: Integer);
    function GetValue: Integer;
    property TestValue: Integer read GetValue write SetValue;
  end;

  TTest = class(TInterfacedObject, ITest)
    procedure SetValue(Value: Integer);
    function GetValue: Integer;
    property TestValue: Integer read GetValue write SetValue;

    constructor Create;
    destructor Destroy; override;
  end;

function GetITest(): ITest;
begin
  Result := TTest.Create;
end;

exports
  GetITest;

//** Реализация класса в отдельном модуле dll

implementation

constructor TTest.Create;
begin
  inherited Create;
  SetValue(123456);
end;

destructor TTest.Destroy;
begin
  //**
end;

procedure TTest.SetValue(Value: Integer);
begin
  //**
  TestValue := Value;
end;

function TTest.GetValue: Integer;
begin
  //**
  Result := TestValue;
end;
(test.exe)

Код:
  ITest = interface
  ['{995D3A5B-5E9F-47FE-AF59-EDB60FD2B061}']
    procedure SetValue(Value: Integer);
    function GetValue: Integer;
    property TestValue: Integer read GetValue write SetValue;
  end;
Далее в test.exe создаем и вызываем метод, возникает ошибка - Переполнение стэка не могу понять в чем проблема подскажите плиз

Код:
  function GetITest: ITest; external 'test.dll' name 'GetITest';

var
  Form1: TForm1;

  intf: ITest;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  intf := GetITest;
  ShowMessage(IntToStr(intf.getvalue));
end;
MaZaHaKa вне форума Ответить с цитированием
Старый 30.11.2008, 19:17   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

property Testvalue: integer write Setvalue;

procedure SetValue(val);
begin
TestValue:=val;//в данной строке замаскировался рекурсивный вызов SetValue
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц