Udostępnij za pośrednictwem


pin_ptr (C++/CLI)

Deklaruje Przypinanie wskaźnik, która jest używana tylko z plików wykonywalnych języka wspólnego.

Wszystkich modułów wykonawczych.

(Nie są żadne uwagi dla tej funkcji języka, stosowane do wszystkich modułów wykonawczych).

Windows Runtime

(Ta funkcja języka nie jest obsługiwana w środowisku wykonawczym Windows.)

Common Language Runtime

A Przypinanie wskaźnik jest wskaźnik wnętrza, uniemożliwiający obiekt wskazywanej przenoszenia na stercie zebrane garbage.Oznacza to, że wartość wskaźnika możliwości przypinania ich nie zostanie zmieniona przez common language runtime.Jest to wymagane, jeśli adres klas zarządzanych do niezarządzanych funkcji tak, że adres nie zmieni nieoczekiwanie podczas rozpoznawania wywołanie funkcji niezarządzanego.

1dz8byfh.collapse_all(pl-pl,VS.110).gifSkładnia

[cli::]pin_ptr<cv_qualifier type> var = &initializer;

1dz8byfh.collapse_all(pl-pl,VS.110).gifParametry

  • cv_qualifier
    constlub volatile kwalifikatorów.Domyślnie jest wskaźnik możliwości przypinania ich volatile.Jest zbędne, ale nie błąd zadeklarować wskaźnika możliwości przypinania ich volatile.

  • Typ
    Typ initializer.

  • var
    Nazwa pin_ptr zmienna.

  • Inicjator
    Członek typ odwołania, element tablicy lub każdego innego obiektu można przypisać do macierzystych wskaźnika.

1dz8byfh.collapse_all(pl-pl,VS.110).gifUwagi

A pin_ptr stanowi nadzbiór funkcji wskaźnik macierzystym.W związku z tym, wszystko, co może być przypisana do wskaźnika macierzystego można przypisać również do pin_ptr.Wewnętrzne wskaźnik może wykonywać ten sam zestaw operacji jako wskaźniki macierzystym, włączając porównanie i wskaźnik arytmetycznych.

Obiekt lub sub-object klasy zarządzanej można zakotwiczać, w którym to przypadku common language runtime nie przenosi go podczas wyrzucania elementów bezużytecznych.Główne wykorzystania tego jest przekazuje się wskaźnik do danych zarządzanych jako rzeczywisty parametr wywołanie funkcji niezarządzanego.Podczas cyklu zbierania środowiska wykonawczego inspekcji metadanych dla wskaźnika możliwości przypinania ich i nie będzie przenoszony element, który wskazuje.

Przypinanie obiektu przypięcie jej wartości pól; oznacza to, że pola pierwotny lub wartość typu.Jednakże pól zadeklarowanych przez śledzenia uchwytu (%) nie są przypięte.

Przypinanie sub-object, zdefiniowany w zarządzanym obiektem skutkuje przypinanie całego obiektu.

Jeśli wskaźnik możliwości przypinania ich zostanie przypisany do wskaż nową wartość, poprzednie wystąpienie wskazywanego nie już uważany za unieruchomiony.

Obiekt jest zakotwiczony, tylko podczas pin_ptr wskaże go.Obiekt jest zakotwiczony, już podczas jego możliwości przypinania ich wskaźnik wykracza poza zakres lub jest ustawiona na nullptr.Po pin_ptr elektrotechnicznych blach teksturowanych zakres, obiekt, który został przypięte mogą być przenoszone na stercie przez garbage collector.Macierzysty wskaźniki, które nadal wskaż obiekt nie zostanie zaktualizowana i de-referencing, jeden z nich może podnieść wyjątek nieodwracalny.

Jeśli żadne wskaźniki możliwości przypinania ich wskaż obiekt (wszystkie wskaźniki możliwości przypinania ich przekroczyła zakres, zostały przypisane do pkt do innych obiektów lub zostały przypisane nullptr), obiekt jest gwarantowane, że nie zostać unieruchomiony.

Wskaźnik możliwości przypinania ich można wskaż uchwyt odniesienia wartość typu lub typu boxed uchwyt, członka typu zarządzanego lub element tablicy.Nie można wskazać typ odwołania.

Biorąc pod adresem pin_ptr że punktów do obiektu macierzystego powoduje zachowanie niezdefiniowany.

Możliwości przypinania ich wskaźniki mogą być deklarowane jako zmienne lokalne-statycznej na stosie.

Nie można użyć wskaźników możliwości przypinania ich jako:

  • Parametry funkcji

  • zwracany typ funkcji

  • Członek klasy

  • Typ docelowy rzutowania.

pin_ptrw cli obszaru nazw.Aby uzyskać więcej informacji, zobacz Przestrzeń nazw platformy, domyślna i cli (C++ Component Extensions).

Aby uzyskać więcej informacji na temat wewnętrznych wskaźniki zobacz interior_ptr (C++/CLI).

Aby uzyskać więcej informacji na temat przypinanie wskaźniki, zobacz Jak: wskaźniki Pin i tablic i Jak: zadeklarować przypinanie wskaźniki i typów wartości.

1dz8byfh.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora:/clr

1dz8byfh.collapse_all(pl-pl,VS.110).gifPrzykłady

Przykład

W poniższym przykładzie użyto pin_ptr Aby ograniczyć położenie pierwszego elementu tablicy.

// pin_ptr_1.cpp
// compile with: /clr 
using namespace System;
#define SIZE 10

#pragma unmanaged
// native function that initializes an array
void native_function(int* p) {
   for(int i = 0 ; i < 10 ; i++)
    p[i] = i;
}
#pragma managed

public ref class A {
private:
   array<int>^ arr;   // CLR integer array

public:
   A() {
      arr = gcnew array<int>(SIZE);
   }

   void load() {
   pin_ptr<int> p = &arr[0];   // pin pointer to first element in arr
   int* np = p;   // pointer to the first element in arr
   native_function(np);   // pass pointer to native function
   }

   int sum() {
      int total = 0;
      for (int i = 0 ; i < SIZE ; i++)
         total += arr[i];
      return total;
   }
};

int main() {
   A^ a = gcnew A;
   a->load();   // initialize managed array using the native function
   Console::WriteLine(a->sum());
}

Dane wyjściowe

  

Przykład

Poniższy przykład pokazuje że wnętrza wskaźnik mogą być konwertowane na możliwości przypinania ich wskaźnik, i że zwrot wpisz adres z operatora (&) jest wnętrza wskaźnika, gdy argument jest na zarządzanego stosu.

// pin_ptr_2.cpp
// compile with: /clr
using namespace System;

ref struct G {
   G() : i(1) {}
   int i;
};

ref struct H {
   H() : j(2) {}
   int j;
};

int main() {
   G ^ g = gcnew G;   // g is a whole reference object pointer
   H ^ h = gcnew H;

   interior_ptr<int> l = &(g->i);   // l is interior pointer

   pin_ptr<int> k = &(h->j);   // k is a pinning interior pointer

   k = l;   // ok
   Console::WriteLine(*k);
};

Dane wyjściowe

  

Przykład

Poniższy przykład pokazuje, że wskaźnik możliwości przypinania ich można rzutować na innego typu.

// pin_ptr_3.cpp
// compile with: /clr
using namespace System;

ref class ManagedType {
public:
   int i;
};

int main() {
   ManagedType ^mt = gcnew ManagedType;
   pin_ptr< int > pt = &mt->i;
   *pt = 8;
   Console::WriteLine(mt->i);

   char *pc = ( char* ) pt;
   *pc = 255;
   Console::WriteLine(mt->i);
}

Dane wyjściowe