Что такое IntPtr точно?

Оба метода используются многими крупными плеерами. Это - вопрос предпочтения. Мое предпочтение является REST, потому что более просто использовать и понять.

Простой протокол доступа к объектам (SOAP):

  • SOAP создает протокол XML сверху HTTP или иногда TCP/IP.
  • SOAP описывает функции и типы данных.
  • SOAP является преемником XML-RPC и очень похож, но описывает стандартный способ связаться.
  • Несколько языков программирования имеют собственную поддержку SOAP, Вы обычно подаете его URL веб-сервиса, и можно вызвать его функции веб-сервиса без потребности определенного кода.
  • Двоичные данные, который отправляется, должны быть закодированы сначала в формат, такой как закодированный base64.
  • Имеет несколько протоколов и технологий, касающихся его: WSDL, XSDs, SOAP, Обращение WS

Представительная передача состояния (REST):

  • REST не должен быть по HTTP, но большинство моих точек ниже будет иметь предвзятость HTTP.
  • REST очень легок, он говорит, ожидают минута, нам не нужна вся эта сложность, которую создал SOAP.
  • Обычно использование нормальные методы HTTP вместо большого формата XML, описывающего все. Например, для получения ресурса Вы используете HTTP, ДОБИРАЮТСЯ, для помещения ресурса на сервер, Вы используете ПОМЕЩЕННЫЙ HTTP. Для удаления ресурса на сервере, Вы используете HTTP, УДАЛЯЮТ.
  • REST является очень простым в этом, он использует HTTP, ПОЛУЧАЮТ, POST и ПОМЕЩАЮТ методы для обновления ресурсов на сервере.
  • REST обычно лучше всего используется с Ресурс Ориентированная Архитектура (ROA). В этом способе мышления все - ресурс, и Вы воздействовали бы на эти ресурсы.
  • , пока Ваш язык программирования имеет библиотеку HTTP, и большинство делает, можно использовать протокол HTTP REST очень легко.
  • Двоичные данные или двоичные ресурсы могут просто быть поставлены по их запросу.

существуют бесконечные дебаты по REST по сравнению с SOAP на Google .

Мой фаворит - этот . Обновление 27 ноября 2013: сайт Paul Prescod, кажется, пошел офлайн, и эта статья больше не доступна, копии, хотя может быть найден на Wayback Machine или как PDF в CiteSeerX.

163
задан Callum Rogers 18 July 2009 в 18:13
поделиться

6 ответов

Это «целое число собственного (зависящего от платформы) размера». Он внутренне представлен как void * , но отображается как целое число. Вы можете использовать его всякий раз, когда вам нужно сохранить неуправляемый указатель и вы не хотите использовать небезопасный код. IntPtr.Zero фактически NULL (нулевой указатель).

154
ответ дан 23 November 2019 в 21:17
поделиться

Это тип значения, достаточно большой для хранения адреса памяти, который используется в собственном или небезопасном коде, но не может использоваться напрямую в качестве адреса памяти в безопасном управляемом коде.

Вы можете использовать ] IntPtr.Size , чтобы узнать, работаете ли вы в 32-битном или 64-битном процессе, так как это будет 4 или 8 байтов соответственно.

65
ответ дан 23 November 2019 в 21:17
поделиться

Вот пример:

Я пишу программу на C #, которая взаимодействует с высокоскоростной камерой. У камеры есть собственный драйвер, который получает изображения и автоматически загружает их в память компьютера.

Поэтому, когда я готов добавить последнее изображение в свою программу для работы, драйвер камеры предоставляет мне IntPtr для где изображение УЖЕ хранится в физической памяти, поэтому мне не нужно тратить время / ресурсы на создание еще одного блока памяти для хранения изображения, которое уже находится в памяти. IntPtr просто показывает мне, где уже находится изображение.

43
ответ дан 23 November 2019 в 21:17
поделиться

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

7
ответ дан 23 November 2019 в 21:17
поделиться

Ну, это страница MSDN , которая имеет дело с IntPtr .

Первая строка гласит:

Тип, зависящий от платформы, который используется для представления указателя или дескриптора.

Что касается указателя или дескриптора, страница переходит к состоянию:

Тип IntPtr может использоваться языки, поддерживающие указатели, и как обычное средство обращения к данным между языками, которые делают и не делают указатели поддержки.

Объекты IntPtr также могут использоваться для держаться за ручки. Например, экземпляры IntPtr широко используются в System.IO.FileStream класс для хранения дескрипторы файлов.

Указатель - это ссылка на область памяти, в которой хранятся некоторые интересующие вас данные.

Дескриптор может быть идентификатором объекта и передается между методами / классами, когда обе стороны нуждаются в доступе этот объект.

5
ответ дан 23 November 2019 в 21:17
поделиться

A прямая интерпретация

IntPtr - это целое число , которое имеет тот же размер, что и указатель .

Вы можете использовать IntPtr для хранения значения указателя в тип без указателя. Эта функция важна в. NET, поскольку использование указателей очень подвержено ошибкам и, следовательно, незаконно в большинстве контекстов. Позволяя хранить значение указателя в «безопасном» типе данных, соединение между небезопасными сегментами кода может быть реализовано в более безопасном высокоуровневом коде - или даже на языке .NET, который напрямую не указатели поддержки.

Размер IntPtr зависит от платформы, но эту деталь редко нужно учитывать, поскольку система будет автоматически использовать правильный размер.

Имя «IntPtr» сбивает с толку - что-то вроде ] Ручка могла бы быть более подходящей. Мое первоначальное предположение заключалось в том, что «IntPtr» был указателем на целое число. Документация MSDN для IntPtr содержит несколько загадочных деталей, но при этом не дает подробного понимания значения имени.

Альтернативная перспектива

IntPtr - это указатель с двумя ограничениями:

  1. Он не может быть разыменован напрямую
  2. Он не знает тип данных, на которые он указывает.

Другими словами, IntPtr похож на void * - но с дополнительной функцией, которая может (но не должна) использоваться для базовой арифметики указателей.

Чтобы разыменовать IntPtr , вы можете преобразовать его в истинный указатель (операция, которая может выполняться только в «небезопасных» контекстах) или передать ее вспомогательной подпрограмме, например предоставляемые классом InteropServices.Marshal . Использование класса Marshal создает иллюзию безопасности, поскольку не требует от вас нахождения в явном «небезопасном» контексте. Однако,

34
ответ дан 23 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: