Почему я получаю ошибку Пропущенная реализация?

Я получаю сообщение об ошибке:

[Ошибка DCC] Test.pas(10): E2291 Отсутствует реализация метода интерфейса ICoTest64.MyFunc

Ниже приведен фрагмент из файла TLB.

// *********************************************************************//
// Interface: ICoTest64
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {76CF78FE-22A3-4C0B-B1A9-97634A453AE3}
// *********************************************************************//
  ICoTest64 = interface(IDispatch)
    ['{76CF78FE-22A3-4C0B-B1A9-97634A453AE3}']
    function MyFunc(const Range: System.OleVariant): System.OleVariant; safecall;
  end;

А вот и реализация

unit Test;

interface

uses
  SysUtils, ComObj, ComServ, ActiveX, Variants, Office2000, Excel2000, 
  adxAddIn, Test64_TLB,
  System.Classes, adxHostAppEvents, Dialogs, StdVcl;

type
  TCoTest64 = class(TadxAddin, ICoTest64)
  protected
    function MyFunc(var Range: System.OleVariant): System.OleVariant; safecall;
  end;

implementation

function TCoTest64.MyFunc(var Range: System.OleVariant): System.OleVariant;
begin
  Result:= 10;
end;

end.

Насколько я могу судить implementation = interface

Я использую Delphi XE2

В чем дело?

1 ответ

Решение

Списки параметров функции для MyFunc не совпадают. Объявление в интерфейсе ICoTest64 использует const параметр. Но ваша реализация в классе TCoReporting64 использует var параметр.

Предполагая, что объявление интерфейса правильное, вам нужно изменить код следующим образом:

type
  TCoReporting64 = class(TadxAddin, ICoTest64)
  protected
    function MyFunc(const Range: System.OleVariant): System.OleVariant; safecall;
  end;
Другие вопросы по тегам