Оба метода используются многими крупными плеерами. Это - вопрос предпочтения. Мое предпочтение является REST, потому что более просто использовать и понять.
Простой протокол доступа к объектам (SOAP):
Представительная передача состояния (REST):
существуют бесконечные дебаты по REST по сравнению с SOAP на Google .
Мой фаворит - этот . Обновление 27 ноября 2013: сайт Paul Prescod, кажется, пошел офлайн, и эта статья больше не доступна, копии, хотя может быть найден на Wayback Machine или как PDF в CiteSeerX.
Это «целое число собственного (зависящего от платформы) размера». Он внутренне представлен как void *
, но отображается как целое число. Вы можете использовать его всякий раз, когда вам нужно сохранить неуправляемый указатель и вы не хотите использовать небезопасный
код. IntPtr.Zero
фактически NULL
(нулевой указатель).
Это тип значения, достаточно большой для хранения адреса памяти, который используется в собственном или небезопасном коде, но не может использоваться напрямую в качестве адреса памяти в безопасном управляемом коде.
Вы можете использовать ] IntPtr.Size
, чтобы узнать, работаете ли вы в 32-битном или 64-битном процессе, так как это будет 4 или 8 байтов соответственно.
Вот пример:
Я пишу программу на C #, которая взаимодействует с высокоскоростной камерой. У камеры есть собственный драйвер, который получает изображения и автоматически загружает их в память компьютера.
Поэтому, когда я готов добавить последнее изображение в свою программу для работы, драйвер камеры предоставляет мне IntPtr для где изображение УЖЕ хранится в физической памяти, поэтому мне не нужно тратить время / ресурсы на создание еще одного блока памяти для хранения изображения, которое уже находится в памяти. IntPtr просто показывает мне, где уже находится изображение.
MSDN сообщает нам:
Тип IntPtr разработан как целое число, размер которого зависит от платформы. То есть ожидается, что экземпляр этого типа быть 32-битным на 32-битном оборудовании и операционные системы и 64-битные на 64-битное оборудование и операционные системы.
Тип IntPtr может использоваться языки, поддерживающие указатели, и как обычное средство обращения к данным между языками, которые делают и не делают указатели поддержки.
Объекты IntPtr также могут использоваться для держаться за ручки. Например, экземпляры IntPtr широко используются в System.IO.FileStream класс для хранения дескрипторы файлов.
Тип IntPtr является CLS-совместимым, а тип UIntPtr - нет. Только тип IntPtr используется в общем языковая среда. Тип UIntPtr - предоставлено в основном для обслуживания архитектурная симметрия с IntPtr введите.
http://msdn.microsoft.com/en-us/library/system.intptr (VS.71) .aspx
Ну, это страница MSDN , которая имеет дело с IntPtr
.
Первая строка гласит:
Тип, зависящий от платформы, который используется для представления указателя или дескриптора.
Что касается указателя или дескриптора, страница переходит к состоянию:
Тип IntPtr может использоваться языки, поддерживающие указатели, и как обычное средство обращения к данным между языками, которые делают и не делают указатели поддержки.
Объекты IntPtr также могут использоваться для держаться за ручки. Например, экземпляры IntPtr широко используются в System.IO.FileStream класс для хранения дескрипторы файлов.
Указатель - это ссылка на область памяти, в которой хранятся некоторые интересующие вас данные.
Дескриптор может быть идентификатором объекта и передается между методами / классами, когда обе стороны нуждаются в доступе этот объект.
IntPtr - это целое число , которое имеет тот же размер, что и указатель .
Вы можете использовать IntPtr для хранения значения указателя в тип без указателя. Эта функция важна в. NET, поскольку использование указателей очень подвержено ошибкам и, следовательно, незаконно в большинстве контекстов. Позволяя хранить значение указателя в «безопасном» типе данных, соединение между небезопасными сегментами кода может быть реализовано в более безопасном высокоуровневом коде - или даже на языке .NET, который напрямую не указатели поддержки.
Размер IntPtr зависит от платформы, но эту деталь редко нужно учитывать, поскольку система будет автоматически использовать правильный размер.
Имя «IntPtr» сбивает с толку - что-то вроде ] Ручка
могла бы быть более подходящей. Мое первоначальное предположение заключалось в том, что «IntPtr» был указателем на целое число. Документация MSDN для IntPtr содержит несколько загадочных деталей, но при этом не дает подробного понимания значения имени.
IntPtr
- это указатель с двумя ограничениями:
Другими словами, IntPtr
похож на void *
- но с дополнительной функцией, которая может (но не должна) использоваться для базовой арифметики указателей.
Чтобы разыменовать IntPtr
, вы можете преобразовать его в истинный указатель (операция, которая может выполняться только в «небезопасных» контекстах) или передать ее вспомогательной подпрограмме, например предоставляемые классом InteropServices.Marshal
. Использование класса Marshal
создает иллюзию безопасности, поскольку не требует от вас нахождения в явном «небезопасном» контексте. Однако,