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


Автор: CYBERDREAM 20.12.2007, 10:49
Доброго времени суток народ. Есть кусок небезоспасного кода, и хотелось бы убрать его (не удалением).
В этом коде у меня используется указатель
Код

    ushort *epcIter = EPCData;
    while(...)
    {
        epcIter++;
    }

Как мне быть если 
Код

    IntPtr *epcIter = EPCData;
    while(...)
    {
        //как сдвинуть вправо?
    }
 smile 

Автор: stab 20.12.2007, 11:24
а смысл? IntPtr* всё равно небезопасный тип. даже если использовать просто IntPtr, то для получения данных хранящихся по этому псевдо-указателю, его всё равно надо будет привести к реальному указателю, что есть небезопасный код. если имеется уже готовый указатель в виде IntPtr и получать данные по указателю не надо, а просто надо манипулировать адресами, например нужно передать указатель в native-функцию, то:

Код

class Program
{
    const uint SizeOfEPCData = 10;

    static void Main(string[] args)
    {
        IntPtr entry = IntPtr.Zero; // first EPCData entry

        switch (IntPtr.Size)
        {
            case 4:
                {
                    entry = new IntPtr(entry.ToInt32() + SizeOfEPCData); // next entry
                }
                break;
            case 8:
                {
                    entry = new IntPtr(entry.ToInt64() + SizeOfEPCData); // next entry
                }
                break;
        }
    }
}


или просто вести всю арифметику в целых числах, а при необходимости преобразовывать в IntPtr.

Автор: CYBERDREAM 20.12.2007, 11:28
данные по указателю увы надо получать.
Сейчас попробуем попробовать поиграться на основе твоего кода smile 

Автор: stab 20.12.2007, 11:40
никак ты их не получишь без указателей или внешнего native-кода или Marshal.Copy. последний вариант кажется безопасным, но помечен SecurityPermissionFlag.UnmanagedCode. smile

Автор: CYBERDREAM 20.12.2007, 12:14
Тогда так и оставим. Thx  smile 

Автор: CYBERDREAM 20.12.2007, 18:08
Мне вот интересно, что человек пишет ,а то никак не успеваю. А ведь интересно  smile Вечно скрыто сообщение уже

Автор: mr.DUDA 20.12.2007, 18:23
CYBERDREAM, скрыто за дело smile 

Автор: CYBERDREAM 20.12.2007, 21:27
GoshaNahui - перед тем как будешь матерится, отпишись, а то страсть как хочется почитать  smile , ибо злые модераторы скрывают великие речи  smile 

Автор: tol05 20.12.2007, 23:21
да не было там ничего великого, CYBERDREAM, ты уж мне на слово поверь ... А насчет почитать... Чернухи в инете тебе мало что-ли?

Автор: CYBERDREAM 20.12.2007, 23:23
ну про великое - это я так, чуть приувеличил. Удивляет что это не первое нарушение, а лишь отделывается минусами и корректировками сообщений, не пора бы грохнуть (имхо, модераторам конечно виднее)

Автор: tol05 20.12.2007, 23:28
Дык вроде грохнули ... Но, правда, с шансом "оживления" ... в будущем... (желательно-НЕ-обозримом ИМХО)

smile

Автор: CYBERDREAM 20.12.2007, 23:32
Аминь  smile 

Автор: mr.DUDA 21.12.2007, 14:29
Модератор: Тема закрыта (развели тут флейм)

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