Verwendung von pin_ptr



  • Hallo,

    gibt es eine Regel wann gean pin_ptr verwendet werden muss, oder kann mir jemand den Hintergrund con pin_ptr erklären.

    Ein Beispiel:
    Native

    void GetCount(int* pCount);
    

    CLI

    static void GetCount(int% count)
    {
       return ::GetCount(&count);
    
       //alternativ
       pin_ptr<int> pinned(&count);
       return ::GetCount(pinned);
    }
    

    C#

    int count;
       MeineKlasse.GetCount(ref count);
    

    Ist der pin_ptr hier notwendig. Wenn ja dann hab ichs glaub ich kapier.



  • Das es im ISO C++ Standard untersagt ist, die Objekte im Speicher zu verschieben (wenn sie einmal angelegt sind), jedoch dies bei der CLI (CLR) nicht der Fall ist, kann das zu Problemen führen, wenn ein "managed" Speicherort von "unmanaged" Code her refrenziert ist.

    Um dieses Problem zu lösen, weist man die CLI (CLR) an das Objekt nicht zu verschieben. Dies geschieht mit pin_ptr.


Anmelden zum Antworten