Помогите C# MarshallAs и SizeParamIndex в структурах
От: dammer Россия  
Дата: 24.11.05 15:25
Оценка:
Привет всем!

Пишу C# wrapper для СОМ объекта, и натолкнулся на такую вот непонятность.

Имеется интерфейс который в качестве параметра одного из методов
возвращает структуру. В ней имеется поле — указатель на байтовый массив с данными
и поле которое содержит размер массива. При импортировании автоматом, указатель на
массив конвертится в IntPtr и проставляется атрибут [ComConversionLoss],
что меня не сильно радует поскольку обращаться к данным через IntPtr не очень удобно.
Хочется поюзаь сразу byte[].

Для похожей ситуации в PInvoke я использовал параметр атрибута MarshallAs
SizeParamIndex(индекс параметра с длиной массива).
Вопрос такой — если я использую SizeParamIndex в структуре (см.ниже)
будет ли Мarshaler брать размер массива из поля в структуре или он его
из параметров метода дёргать станет?


public struct xStruct
{
    // IDL: unsigned long dwLen
    // Размер массива
    public uint dwLen;

    // IDL: unsigned byte* pbArray
    // Указатель на массив байт
    
    // Сom2net генерирует такой код. 
    // [ComConversionLoss]
    // public IntPtr pbArray;
    
    // Хочется сделать вот так. 
    [MarshallAs(UnmanagedType.LPArray, SizeParamIndex=0)]
    public byte[] pbArray;    
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.