기본 포인터 형식

포인터는 명시적 특성 설명을 가질 필요가 없습니다. 명시적 특성이 제공되지 않으면 MIDL 컴파일러는 기본 포인터 특성을 사용합니다.

비대화되지 않은 포인터의 기본 사례는 다음과 같습니다.

  • 매개 변수 목록에 표시되는 최상위 포인터는 기본적으로 [ref] 포인터입니다.
  • 다른 모든 포인터는 기본적으로 [pointer_default] 특성에 지정된 형식입니다. [pointer_default] 특성이 제공되지 않으면 MIDL 컴파일러가 Microsoft 확장 모드에 있는 경우 [ 고유 ] 특성 또는 MIDL 컴파일러가 DCE 호환 모드인 경우 [ptr] 특성이 기본값으로 지정됩니다.

원격 프로시저가 포인터를 반환하는 경우 반환 값은 [ 고유 ] 또는 전체([ 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.    
}

설명

명확한 포인터 특성 동작을 보장하려면 포인터를 정의할 때 항상 명시적 포인터 특성을 사용합니다.

포인터 별칭이 필요한 경우에만 [ptr] 을 사용하는 것이 좋습니다.