Я использую концепцию взаимодействия между Delphi и C#. Я создал классы в C# и импортировал эти классы в проект delphi как COM-объекты. Объявление класса в C# кодСоздание SafeArray с объектами определенного типа пользователя
public class HotelAvailNotifRQ : IHotelAvailNotifRQ
{
[MarshalAs(UnmanagedType.LPArray)]
public IAvailStatusMessage[] AvailStatusMessagesField;
public IAvailStatusMessage[] AvailStatusMessages
{
get { return AvailStatusMessagesField; }
set { AvailStatusMessagesField = value; }
}
}
И когда я импортировать этот класс как объект ком Дельфы, который будет как
IHotelAvailNotifRQ = interface(IDispatch)
['{2F7C57D7-256A-3102-A4C6-FD081C8342B4}']
function Get_AvailStatusMessages: PSafeArray; safecall;
procedure Set_AvailStatusMessages(pRetVal: PSafeArray); safecall;
property AvailStatusMessages: PSafeArray read Get_AvailStatusMessages write Set_AvailStatusMessages;
end;
Я могу создать объект IAvailStatusMessage успешно. Но, в то время как я ставлю этот объект в PSafeArray с помощью функции
SafeArrayPutElement(HotelAvailNotifRQ.AvailStatusMessages, Idx, AvailStatusMessage)
я получаю сообщение об ошибке, как «параметр неверен». Пожалуйста, помогите мне решить эту проблему.
Почему вы хотите использовать LPArray типы? Боюсь, вы не сможете получить доступ к экземплярам интерфейса IAvailStatusMessage через COM. Используйте обычный промежуточный класс .Net, который инкапсулирует интерфейсы, а затем публикует обычный список. –
Hi Arnaud, я думаю По объектам COM мы можем только публиковать интерфейсы. Я не проверял это. И, возможно ли опубликовать список из управляемого кода в неуправляемый код? если это возможно, то это легко разрешит мою проблему. Если у вас есть ссылка, отправьте ее. – shyambabu
'Idx' - какой тип этого параметра? – kami