영어로 읽기

다음을 통해 공유


IDL 파일에서 파이프 정의

파이프가 IDL 파일에 정의되면 MIDL 컴파일러는 이러한 프로시저를 조정하는 상태 변수뿐만 아니라 밀어넣기, 끌어오기 및 할당 프로시저에 대한 포인터인 파이프 컨트롤 구조를 생성합니다. 클라이언트 애플리케이션은 파이프 제어 구조의 필드를 초기화하고, 상태 변수를 유지 관리하며, 자체 밀어넣기, 끌어오기 및 할당 함수를 사용하여 데이터 전송을 관리합니다. 클라이언트 스텁 코드는 데이터 전송 중에 이러한 애플리케이션 함수를 루프로 호출합니다. 입력 파이프의 경우 클라이언트 스텁은 전송 데이터를 마샬링하고 서버 스텁으로 전송합니다. 출력 파이프의 경우, 클라이언트 스텁은 데이터를 버퍼에 디시리얼라이즈하고, 그 버퍼에 대한 포인터를 클라이언트 애플리케이션으로 다시 전달합니다.

서버 스텁 코드는 파이프 컨트롤 구조의 필드를 상태 변수로 초기화하고 푸시 및 끌어오기 루틴에 대한 포인터를 초기화합니다. 서버 스텁은 상태를 유지하고 전송 데이터에 대한 프라이빗 스토리지를 관리합니다. 서버 애플리케이션은 클라이언트 스텁에서 데이터를 수신 및 분리하거나 데이터를 마샬링하고 클라이언트 스텁으로 전송할 때 원격 프로시저 호출 중에 루프에서 끌어오기 및 푸시 루틴을 호출합니다.

다음 예제 IDL 파일은 LONG_PIPE라는 파이프 형식을 정의하며, 이 형식의 요소 크기는 long로 정의됩니다. 또한 데이터를 각각 보내고 받기 위해 원격 프로시저 호출 InPipe 및 OutPipe에 대한 함수 프로토타입을 선언합니다. MIDL 컴파일러가 IDL 파일을 처리하면 예제에 표시된 헤더 파일이 생성됩니다.

예시

// File: pipedemo.idl
typedef pipe long LONG_PIPE;
void InPipe( [in] LONG_PIPE pipe_data );
void OutPipe( [out] LONG_PIPE *pipe_data ); 
//end pipedemo.idl
 
// File: pipedemo.h (fragment)
// Generated by the MIDL compiler from pipedemo.idl
typedef struct pipe_LONG_PIPE
{
    void (__RPC_FAR * pull) (
        char __RPC_FAR * state,
        long __RPC_FAR * buf,
        unsigned long esize,
        unsigned long __RPC_FAR * ecount );
    void (__RPC_FAR * push) (
        char __RPC_FAR * state,
        long __RPC_FAR * buf,
        unsigned long ecount );
    void (__RPC_FAR * alloc) (
        char __RPC_FAR * state,
        unsigned long bsize,
        long __RPC_FAR * __RPC_FAR * buf,
        unsigned long __RPC_FAR * bcount );
    char __RPC_FAR * state;
} LONG_PIPE;
 
void InPipe( 
    /* [in] */ LONG_PIPE pipe_data);
void OutPipe( 
    /* [out] */ LONG_PIPE __RPC_FAR *pipe_data);
//end pipedemo.h

파이프

/Oi