Bagikan melalui


Jenis Penunjuk Default

Pointer tidak diperlukan untuk memiliki deskripsi atribut eksplisit. Saat atribut eksplisit tidak disediakan, Compiler MIDL menggunakan atribut pointer default.

Kasus default untuk penunjuk yang tidak ditangguhkan adalah sebagai berikut:

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

Saat 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.    
}

Komentar

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.