将多个索引属性从 C# 导出到 tlb --> delphi
Exporting multiple indexed attributes from C# to tlb --> delphi
我目前正在尝试重新实现一个 com 接口。
该接口当前用于 Delphi 项目。
Delphi 接口代码大概是使用 "TLIBIMP.EXE -P" 机器生成的)
在这个自动生成的代码中有例如这个接口:
IDPets = interface(IDispatch)
['{679DDC30-232F-11D3-B461-00A024BEC59F}']
function Get_Value(Index: Integer): Double; safecall;
procedure Set_Value(Index: Integer; Value: Double); safecall;
function Get_Pet(Index: Integer): IDPets; safecall;
procedure Set_Pet(Index: Integer; const Ptn: IDPets); safecall;
property Value[Index: Integer]: Double read Get_Value write Set_Value;
property Pet[Index: Integer]: IDPets read Get_Pet write Set_Pet;
end;
如您所见,有多个 属性 可以像字段或数组一样使用方括号访问。
到目前为止我取得了什么成就:
在 C# 中,可以使用此代码编写一个索引器访问器
[System.Runtime.CompilerServices.IndexerName("Cat")]
public ICat this[int index] { get; set; }
(来自:)
问题:
但现在我需要在 class 中有多个索引器。它们仅在 return 类型上有所不同,所以我不能简单地重载 "this" 关键字。
所以有没有人知道我如何在 C# 中实现它,以便我得到一个 TLB 文件,该文件可用于生成 Delphi 代码,您可以在这个 [=42] 的顶部看到=]?
非常感谢任何想法。
编辑:我已经偶然发现了这个 post
它有点工作,所以我能够导出多个属性,索引为 Delphi。但是此属性的类型不正确。例如:double 不是 double 它是 IIndexerDouble(我需要从 com 导出的索引器中删除泛型,所以我必须为我想使用的每个数据类型编写一个索引器)
您不需要 "have more than one indexer in a class"。你真正需要的是在 Delphi.
中有几个索引属性
假设您要添加索引为 属性 的 Dog
。首先将这些常规方法添加到 C# class:
public Dog GetDog(int index)
{
...
}
public void SetDog(int index, Dog value)
{
...
}
他们会生成这个:
function GetDog(Index: Integer): IDDogs; safecall;
procedure SetDog(Index: Integer; const Ptn: IDDogs); safecall;
现在只需添加索引的声明 属性:
property Dog[Index: Integer]: IDDogs read GetDog write SetDog;
我目前正在尝试重新实现一个 com 接口。 该接口当前用于 Delphi 项目。 Delphi 接口代码大概是使用 "TLIBIMP.EXE -P" 机器生成的) 在这个自动生成的代码中有例如这个接口:
IDPets = interface(IDispatch)
['{679DDC30-232F-11D3-B461-00A024BEC59F}']
function Get_Value(Index: Integer): Double; safecall;
procedure Set_Value(Index: Integer; Value: Double); safecall;
function Get_Pet(Index: Integer): IDPets; safecall;
procedure Set_Pet(Index: Integer; const Ptn: IDPets); safecall;
property Value[Index: Integer]: Double read Get_Value write Set_Value;
property Pet[Index: Integer]: IDPets read Get_Pet write Set_Pet;
end;
如您所见,有多个 属性 可以像字段或数组一样使用方括号访问。
到目前为止我取得了什么成就:
在 C# 中,可以使用此代码编写一个索引器访问器
[System.Runtime.CompilerServices.IndexerName("Cat")]
public ICat this[int index] { get; set; }
(来自:
问题:
但现在我需要在 class 中有多个索引器。它们仅在 return 类型上有所不同,所以我不能简单地重载 "this" 关键字。
所以有没有人知道我如何在 C# 中实现它,以便我得到一个 TLB 文件,该文件可用于生成 Delphi 代码,您可以在这个 [=42] 的顶部看到=]?
非常感谢任何想法。
编辑:我已经偶然发现了这个 post 它有点工作,所以我能够导出多个属性,索引为 Delphi。但是此属性的类型不正确。例如:double 不是 double 它是 IIndexerDouble(我需要从 com 导出的索引器中删除泛型,所以我必须为我想使用的每个数据类型编写一个索引器)
您不需要 "have more than one indexer in a class"。你真正需要的是在 Delphi.
中有几个索引属性假设您要添加索引为 属性 的 Dog
。首先将这些常规方法添加到 C# class:
public Dog GetDog(int index)
{
...
}
public void SetDog(int index, Dog value)
{
...
}
他们会生成这个:
function GetDog(Index: Integer): IDDogs; safecall;
procedure SetDog(Index: Integer; const Ptn: IDDogs); safecall;
现在只需添加索引的声明 属性:
property Dog[Index: Integer]: IDDogs read GetDog write SetDog;