gpt4 book ai didi

c# - 如何导出C#编写的接口(interface)来实现TLB生成的Delphi代码

转载 作者:行者123 更新时间:2023-12-03 15:51:22 24 4
gpt4 key购买 nike

我目前正在开发旧 COM 接口(interface)(用于与其他设备通信)的“直接”替代品。该接口(interface)目前在大型应用程序中使用。旧的 COM 接口(interface)现已被库的作者弃用,他们现在仅支持和开发 C# 接口(interface)。我的任务是开发上述的“直接”替代品。它充当旧应用程序(用 Delphi 编写)和新的基于 C# 的界面之间的代理。我试图在主应用程序中进行尽可能少的代码更改。因此,我尝试尽可能地模仿旧界面。所以我用 C# 编写代码,然后将其导出到 TLB 文件中。 TLB 文件用于使用“TLIBIMP.EXE -P”命令生成 Delphi 对应文件。

这是使用旧界面生成的代码。正如您所看到的,有一个属性 Cat,可以使用索引来调用它来获取其后面的集合的适当项目。

IDFoo = interface(IDispatch)
['{679F4D30-232F-11D3-B461-00A024BEC59F}']
function Get_Cat(Index: Integer): IDFoo; safecall;
procedure Set_Cat(Index: Integer; const Evn: IDFoo); safecall;
property Cat[Index: Integer]: IDFoo read Get_Cat write Set_Cat;
end;

我正在尝试获取一个 C# 对应项,它会生成一个 TLB 文件,其中包含 Cat[index] 属性。

所以到目前为止我的解决方案是这样的:C#:

[ComVisible(true)]
[Guid("821A3A07-598B-450D-A22B-AA4839999A18")]
public interface ICat
{
ICat this[int index] { get; set; }
}

这会生成一个 TLB,然后生成以下 Delphi 代码:

  ICat = interface(IDispatch)
['{821A3A07-598B-450D-A22B-AA4839999A18}']
function Get_Item(index: Integer): ICat; safecall;
procedure _Set_Item(index: Integer; const pRetVal: ICat); safecall;
property Item[index: Integer]: ICat read Get_Item write _Set_Item; default;
end;

到目前为止一切顺利。但该属性被命名为“Item”,而不是像原来的“Cat”。有人提示我如何实现这一目标吗?

最佳答案

Item 是 C# 索引器的默认名称。

第一种可能性是在生成的 Delphi 代码中将 Item 重命名为 Cat

第二种可能性是指定 C# 索引器名称:

[System.Runtime.CompilerServices.IndexerName("Cat")]
public ICat this[int index] { get; set; }

关于c# - 如何导出C#编写的接口(interface)来实现TLB生成的Delphi代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61099378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com