Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > массив


Автор: cthutq 17.4.2006, 18:45
есть СОМ объект написанный на С++
у него есть метод
func(ULONG* size, BYTE* buffer);

под .NET этот метод стал иметь вид
void func (ref uint, ref byte);

я создал массив
byte[] buffer = new byte[100];
и передаю его
uint size = buffer.Length;
func(ref size, ref buffer[0]);

но изменяется только первый байт а остольное пишется непонятно куда
есть подозрение что buffer[0] возвращает копию и в функцию я передаю ссылку на локально созданный только один байт

как правильно ?  

Автор: -ser- 18.4.2006, 06:02
а зачем ты указываешь func(ref size, ref buffer[0]); ?

почему не       func(ref size, ref buffer);

 

Автор: cthutq 18.4.2006, 11:07
Цитата(-ser- @  18.4.2006,  06:02 Найти цитируемый пост)
а зачем ты указываешь func(ref size, ref buffer[0]); ?

почему не       func(ref size, ref buffer);

потому, что .NET его поняла как

void func (ref uint, ref byte);

тоесть ссылка на байт а не массив байт 

Автор: ivashkanet 18.4.2006, 11:21
Имя массива и есть ссылка на массив  smile 
А не первый элемент как в С 

Автор: cthutq 18.4.2006, 19:39
Цитата(ivashkanet @  18.4.2006,  11:21 Найти цитируемый пост)
Имя массива и есть ссылка на массив   
А не первый элемент как в С  

так проблемма в том, что
func(ULONG* size, BYTE* buffer);

был воспринят как 
void func (ref uint, ref byte);

а не как
void func (ref uint, ref byte[]);

или 
void func (ref uint, byte[]);


в этом и косяк 

Автор: ivashkanet 19.4.2006, 08:01
А кто его знает, я в С не силен (так мелкие програмки).
А нельзя COM переписать, чтоб он явно использовал массив, а не ссылку на первый элемент. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)