Я сейчас пытаюсь переопределить ком интерфейс. Этот интерфейс в настоящее время используется в проекте 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; }
(от: Как экспортировать интерфейс, написанный на C#, чтобы получить Delphi код, сгенерированный TLB )
Вопрос:
Но теперь мне нужно иметь более одного индексатора в классе. И они отличаются только по типу возвращаемого значения, поэтому я не могу просто перегрузить ключевое слово "this".
Так что у кого-нибудь есть идеи, как я могу реализовать это в C#, чтобы я получил файл TLB, который чем можно использовать для генерации Delphi кода, который вы можете увидеть в верхней части этого поста?
Любые идеи высоко ценятся.
Редактировать: я уже наткнулся на этот пост { ссылка } Это своего рода работа, поэтому я могу экспортировать несколько свойств с индексом в Delphi. Но тип этого свойства не правильный. Например: double это не double, это IIndexerDouble (мне нужно было удалить generi c из индексатора для экспорта com, поэтому мне пришлось написать индексатор для каждого типа данных, который я хочу использовать)