В настоящее время я разрабатываю замену старого интерфейса COM (который используется для связи с другими устройствами). Этот интерфейс в настоящее время используется в большом приложении. Старый интерфейс COM теперь не поддерживается автором библиотеки, которую они только поддерживают и развивают C# интерфейс. Моя задача - разработать вышеупомянутую замену. Который действует как прокси между старым приложением (написано в Delphi) и новым интерфейсом на основе C#. Я пытаюсь сделать как можно меньше изменений кода в основном приложении. Поэтому я стараюсь имитировать c старый интерфейс как можно лучше. Поэтому я пишу код в C#, который затем экспортируется в файл TLB. Файл TLB используется для генерации копии Delphi с помощью команды «TLIBIMP.EXE -P».
Это код, созданный с использованием старого интерфейса. Как вы можете видеть, есть свойство 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;
Все идет нормально. Но свойство называется «Предмет», а не как оригинал «Кошка». У кого-нибудь есть подсказка, как мне этого добиться?