我正在尝试用 Delphi 中的 Enumerable 和 Enumerator 编写一个 COM 对象。这是一场噩梦。 首先在 .ridl 文件中: 接下来在 _tlb.pas 中我有这个:
// *********************************************************************//
// Interface : ITrackingRatesCol
// Indicateurs : (4416) Dual OleAutomation Dispatchable
// GUID : {F116E1DA-7E3E-4207-BD17-1615DCE4BE41}
// *********************************************************************//
ITrackingRatesCol = interface(IEnumerable)
['{F116E1DA-7E3E-4207-BD17-1615DCE4BE41}']
function Get_Count: Integer; safecall;
property Count: Integer read Get_Count;
end;
// *********************************************************************//
// DispIntf : ITrackingRatesColDisp
// Indicateurs : (4416) Dual OleAutomation Dispatchable
// GUID : {F116E1DA-7E3E-4207-BD17-1615DCE4BE41}
// *********************************************************************//
ITrackingRatesColDisp = dispinterface
['{F116E1DA-7E3E-4207-BD17-1615DCE4BE41}']
property Count: Integer readonly dispid 1;
function GetEnumerator: IEnumVARIANT; dispid -4;
end;
在我的对象的 .pas 文件中:
TTrackingRatesCol = class(TAutoObject, ITrackingRatesCol,IEnumerable)
private
fIndex,fCount:integer;
protected
function GetCurrent:driverates;safecall;
function Get_Count: Integer; safecall;
function MoveNext: WordBool; safecall;
function GetEnumerator: IEnumerator; safecall;
public
procedure Initialize; override;
destructor Destroy; override;
end;
implementation
uses ComServ,Data.Win.ADODB,Core,SysUtils;
function TTrackingRatesCol.GetEnumerator: IEnumerator;
begin
result:=self;
end;
但我总是收到这样的消息:缺少 IEnumerable.GetEnumerator 接口的实现! 非常感谢您的帮助。
米歇尔
tl;博士:删除
safecall
IEnumerable
的定义:
IEnumerable = interface(IInterface)
function GetEnumerator: IEnumerator;
end;
你的:
function GetEnumerator: IEnumerator; safecall;
或者并排:
function GetEnumerator: IEnumerator; // definition
function GetEnumerator: IEnumerator; safecall; // yours