Почему я получаю ошибку Пропущенная реализация?
Я получаю сообщение об ошибке:
[Ошибка 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;