Bagikan melalui


Jenis Penunjuk Default

Pointer tidak diharuskan untuk memiliki deskripsi atribut eksplisit. Ketika atribut eksplisit tidak disediakan, Compiler MIDL menggunakan atribut pointer default.

Kasus default untuk pointer yang tidak terikat adalah sebagai berikut:

  • Pointer tingkat atas yang muncul dalam parameter mencantumkan default ke penunjuk [ref].
  • Semua pointer lainnya default ke jenis yang ditentukan oleh atribut [pointer_default]. Ketika tidak ada atribut [pointer_default] yang disediakan, pointer ini default ke atribut [ unik ] ketika pengkompilasi MIDL berada dalam mode Microsoft Extensions atau atribut [ptr] ketika pengkompilasi MIDL berada dalam mode yang kompatibel dengan DCE.

Ketika prosedur jarak jauh mengembalikan penunjuk, nilai yang dikembalikan harus menjadi penunjuk [ unik ] atau penuh ([ ptr ]).

/* IDL file compiled without /osf */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0),
  pointer_default(ptr)
]
interface MyInterface
{
    typedef long *PLONG;
  
    struct MyCircularList {
        struct MyCircularList *pRight;
        struct MyCircularList *pLeft;
        long Data;
    };

    void Foo1( [in] PLONG p );                   // p is ref
 
    void Foo2( [in] struct MyCircularList *p );  // p is ref, p->pRight and p->pLeft is ptr

    struct MyCircularList *Foo3( void );         // returned pointer is ptr.    
}

[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea46),
  version(1.0)
]
interface MyInterface2
{
    struct MySingleList
       {
       struct MySingleList *pNext;
       long Data;
       };
    void Foo4( [in] struct MySingleList *p );  // p is ref, p->pNext is unique

    struct MySingleList *Foo5( void );         // returned pointer is unique.    
}

Keterangan

Untuk memastikan perilaku atribut pointer yang tidak ambigu, selalu gunakan atribut pointer eksplisit saat menentukan pointer.

Disarankan agar [ptr] hanya digunakan ketika alias pointer diperlukan.