Re[2]: Как получить массив имея ссылку на его первый элемент
От: ie Россия http://ziez.blogspot.com/
Дата: 21.09.06 08:57
Оценка: +1 :))
Здравствуйте, nikov, Вы писали:

N>
N>using System;
N>using System.Runtime.InteropServices;

N>unsafe class Program
N>{
N>    static void Main()
N>    {
N>        byte[] arr = { 1, 3, 4 };
N>        fixed(byte* ptr = arr)
N>        {
N>            Foo(ref arr[0], arr.Length);
N>        }
N>    }
N>    static void Foo(ref byte x, int size)
N>    {
N>        fixed(byte* ptr = &x)
N>        {
N>            byte[] arr = new byte[size];
N>            Marshal.Copy(new IntPtr(ptr), arr, 0, size);
N>        }
N>    }
N>}


Эх, красота!

N>Но никогда так не делайте!


+100
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re: Как получить массив имея ссылку на его первый элемент
От: nikov США http://www.linkedin.com/in/nikov
Дата: 21.09.06 08:40
Оценка: 3 (1) +1
Здравствуйте, Аноним, Вы писали:

А>
А>public void Test(ref byte pv, uint size)
А>{
А>  byte[] b = ???
А>}
А>


Исходный массив — не знаю, а вот его копию — это можно.

using System;
using System.Runtime.InteropServices;

unsafe class Program
{
    static void Main()
    {
        byte[] arr = { 1, 3, 4 };
        fixed(byte* ptr = arr)
        {
            Foo(ref arr[0], arr.Length);
        }
    }
    static void Foo(ref byte x, int size)
    {
        fixed(byte* ptr = &x)
        {
            byte[] arr = new byte[size];
            Marshal.Copy(new IntPtr(ptr), arr, 0, size);
        }
    }
}


Но никогда так не делайте!
Re: Как получить массив имея ссылку на его первый элемент
От: Lloyd Россия  
Дата: 21.09.06 08:11
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>pv — ссылка на первый элемент массива

А>size — размер массива

Вот так:
public void Test(byte[] v)

и не парить себе мозг.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Как получить массив имея ссылку на его первый элемент
От: Аноним  
Дата: 21.09.06 07:47
Оценка:
pv — ссылка на первый элемент массива
size — размер массива


public void Test(ref byte pv, uint size)
{
  byte[] b = ???
}
Re: Как получить массив имея ссылку на его первый элемент
От: vitz  
Дата: 21.09.06 07:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>pv — ссылка на первый элемент массива

А>size — размер массива


А>
А>public void Test(ref byte pv, uint size)
А>{
А>  byte[] b = ???
А>}
А>

никак ибо между ними нет ничего общего
это в С/С++ указатель на первый элемент есть указатель на начало массива
Re[2]: Как получить массив имея ссылку на его первый элемент
От: Аноним  
Дата: 21.09.06 10:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, <Аноним>, Вы писали:


А>>pv — ссылка на первый элемент массива

А>>size — размер массива

L>Вот так:

L>
L>public void Test(byte[] v)
L>

L>и не парить себе мозг.

Хорошо бы, но...
Использую dll, которая требует поддержку определенного интерфейса, среди методов которого метод:


public Write(ref byte pv, int size)
{
   //тут я должен записать массив байт в FileStream
}
Re[3]: Как получить массив имея ссылку на его первый элемент
От: vitz  
Дата: 21.09.06 10:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хорошо бы, но...

А>Использую dll, которая требует поддержку определенного интерфейса, среди методов которого метод:


А>
А>public Write(ref byte pv, int size)
А>{
А>   //тут я должен записать массив байт в FileStream
А>}
А>


А можно нескромный вопрос?
Где здесть указано что функция принимает массив?

мне это очень напоминает
void Write(const char* ptr, size_t size);

может лучше так и делать?
Re[4]: Как получить массив имея ссылку на его первый элемент
От: Аноним  
Дата: 21.09.06 10:46
Оценка:
Здравствуйте, vitz, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>Хорошо бы, но...

А>>Использую dll, которая требует поддержку определенного интерфейса, среди методов которого метод:


А>>
А>>public Write(ref byte pv, int size)
А>>{
А>>   //тут я должен записать массив байт в FileStream
А>>}
А>>


V>А можно нескромный вопрос?

V>Где здесть указано что функция принимает массив?

V>мне это очень напоминает

V>
V>void Write(const char* ptr, size_t size);
V>

V>может лучше так и делать?


The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.
Re[5]: Как получить массив имея ссылку на его первый элемент
От: vitz  
Дата: 21.09.06 11:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.

Это откель такая надпись прикольная?
Дайте сцилочку. Или это у вас в проекте так принято? Или я безнадежно отстал от жизни?
Re[6]: Как получить массив имея ссылку на его первый элемент
От: vitz  
Дата: 21.09.06 11:45
Оценка:
Здравствуйте, vitz, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.


V>Это откель такая надпись прикольная?

V>Дайте сцилочку. Или это у вас в проекте так принято? Или я безнадежно отстал от жизни?

Отвечу сам себе, ref позволяет передать в функцию пареметр по ссылке, что в свою очередь позволит внутри функции получить адресс этой переменной (а не копии в стеке)
и если случится такое счастье, что эта переменная будет первым элементом массива, то мы и получим его адресс. что и было предложено nikov
но никак не

The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.

в моем конечно понимании.
Re[7]: Как получить массив имея ссылку на его первый элемент
От: Аноним  
Дата: 21.09.06 11:54
Оценка:
Здравствуйте, vitz, Вы писали:

V>Здравствуйте, vitz, Вы писали:


V>>Здравствуйте, Аноним, Вы писали:


А>>>The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.


V>>Это откель такая надпись прикольная?

V>>Дайте сцилочку. Или это у вас в проекте так принято? Или я безнадежно отстал от жизни?

V>Отвечу сам себе, ref позволяет передать в функцию пареметр по ссылке, что в свою очередь позволит внутри функции получить адресс этой переменной (а не копии в стеке)

V>и если случится такое счастье, что эта переменная будет первым элементом массива, то мы и получим его адресс. что и было предложено nikov
V>но никак не
V>

V>The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.

V>в моем конечно понимании.

Речь идет о конкретном примере, в котором в качестве параметра передается ссылка на первый элемент массива!
Еще раз повторю: "КОНКРЕТНЫЙ ПРИМЕР!!!!!" и не надо коверкать мои слова! Приведенная мною цитата относится к примеру!
Re[8]: Как получить массив имея ссылку на его первый элемент
От: vitz  
Дата: 21.09.06 14:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, vitz, Вы писали:


V>>Здравствуйте, vitz, Вы писали:


V>>>Здравствуйте, Аноним, Вы писали:


А>>>>The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.


V>>>Это откель такая надпись прикольная?

V>>>Дайте сцилочку. Или это у вас в проекте так принято? Или я безнадежно отстал от жизни?

V>>Отвечу сам себе, ref позволяет передать в функцию пареметр по ссылке, что в свою очередь позволит внутри функции получить адресс этой переменной (а не копии в стеке)

V>>и если случится такое счастье, что эта переменная будет первым элементом массива, то мы и получим его адресс. что и было предложено nikov
V>>но никак не
V>>

V>>The expression 'ref byte' is used to define a pointer to the first byte of an array of bytes.

V>>в моем конечно понимании.

А>Речь идет о конкретном примере, в котором в качестве параметра передается ссылка на первый элемент массива!

А>Еще раз повторю: "КОНКРЕТНЫЙ ПРИМЕР!!!!!" и не надо коверкать мои слова! Приведенная мною цитата относится к примеру!
Ваши слова никто коверкать не собирался, еще раз повторю НИКТО НЕ СОБИРАЛСЯ КОВЕРКАТЬ!!!!
Где видно что цитата относится к примеру, изъясняйтесь четче...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.