我的课程TRate
来自IDispatch
和TAutoObject
Type
IRate = interface(IDispatch)
['{60B5A5D1-5BA9-4D28-BBF9-DD5BE2B83ED2}']
function Get_Minimum: Double; safecall;
procedure Set_Minimum(Value: Double); safecall;
function Get_Maximum: Double; safecall;
procedure Set_Maximum(Value: Double); safecall;
property Minimum: Double read Get_Minimum write Set_Minimum;
property Maximum: Double read Get_Maximum write Set_Maximum;
end;
TRate = class(TAutoObject, IRate)
protected
function Get_Maximum: Double; safecall;
function Get_Minimum: Double; safecall;
procedure Set_Maximum(Value: Double); safecall;
procedure Set_Minimum(Value: Double); safecall;
public
fMaximum,fMinimum:double;
destructor Destroy; override;
end;
//INSIDE mscorlib_tlb.pas
// *********************************************************************//
// Interface : IEnumerator
// Indicateurs : (4416) Dual OleAutomation Dispatchable
// GUID : {496B0ABF-CDEE-11D3-88E8-00902754C43A}
// *********************************************************************//
IEnumerator = interface(IDispatch)
['{496B0ABF-CDEE-11D3-88E8-00902754C43A}']
function MoveNext: WordBool; safecall;
function Get_Current: OleVariant; safecall;
procedure Reset; safecall;
property Current: OleVariant read Get_Current;
end;
TRateEnum = class(TAutoObject, IEnumerator)
protected
function Get_Current: OleVariant; safecall;
function MoveNext: WordBool; safecall;
procedure Reset; safecall;
public
fAxe,fCount,fIndex:integer;
end;
我有g_Rate
个TRate
类型的对象数组。我必须通过g_Rate
访问IEnumerator
个成员。 IEnumerator
中的标准功能为Get_Current
,看起来像那样(返回OleVariant
):
Type
g_Rate:Array [0..2,0..2] of TRate;
end
function TRateEnum.Get_Current: OleVariant;
begin
result:= g_Rate[i,j];
end;
我收到编译错误,“输入mismatch,Olevariant TRate”,我该如何避免这个问题? 此致
答案 0 :(得分:0)
您正在实现一个返回COM变体的COM方法。 OleVariant
类型用于表示COM变体。来自documentation:
OleVariant是一个与OLE兼容的Variant。 Variant和OleVariant之间的主要区别在于Variant可以包含只有当前应用程序知道如何处理的数据类型。 OleVariant只能包含定义为与OLE Automation兼容的数据类型,这意味着包含的数据类型可以在程序之间或通过网络传递,而不必担心另一端是否知道如何处理数据。
您正在尝试将Delphi类放入OleVariant
,并且因为Delphi类不是自动化类型而被阻止。相反,您需要将自动化界面放入您返回的OleVariant
中:
function TRateEnum.Get_Current: OleVariant;
begin
Result := g_Rate[i,j] as IRate;
end;