다음을 통해 공유


형식 직렬화

MIDL 컴파일러는 [ 인코딩] 또는 [ 디코딩] 특성이 적용되는 각 형식에 대해 최대 3개의 함수를 생성합니다. 예를 들어 MyType이라는 사용자 정의 형식의 경우 컴파일러는 MyType_Encode, MyType_Decode 및 MyType_AlignSize 함수에 대한 코드를 생성합니다. 이러한 함수의 경우 컴파일러는 프로토타입을 Stub.h에 쓰고 소스 코드를 Stub_c.c에 씁니다. 일반적으로 MyType_Encode 사용하여 MyType 개체를 인코딩하고 MyType_Decode 사용하여 버퍼에서 개체를 디코딩할 수 있습니다. MyType_AlignSize 할당하기 전에 마샬링 버퍼의 크기를 알아야 하는 경우에 사용됩니다.

다음 인코딩 함수는 MIDL 컴파일러에서 생성됩니다. 이 함수는 pObject가 가리키는 개체의 데이터를 직렬화하고 핸들에 지정된 메서드에 따라 버퍼를 가져옵니다. 버퍼에 직렬화된 데이터를 쓴 후 버퍼를 제어합니다. 핸들은 이전 호출에서 상태 상속하며 버퍼는 8에 맞춰야 합니다.

암시적 핸들의 경우:

void MyType_Encode (MyType __RPC_FAR * pObject);

명시적 핸들의 경우:

void MyType_Encode (handle_t Handle, MyType __RPC_FAR * pObject);

다음 함수는 애플리케이션의 스토리지에서 pObject가 가리키는 개체로 데이터를 역직렬화합니다. 핸들에 지정된 메서드에 따라 마샬링된 버퍼를 입력합니다. 핸들은 이전 호출에서 상태 상속할 수 있으며 버퍼는 8로 정렬되어야 합니다.

암시적 핸들의 경우:

void MyType_Decode (MyType __RPC_FAR * pObject);

명시적 핸들의 경우:

void MyType_Decode (handle_t Handle, MyType __RPC_FAR * pObject);

다음 함수는 instance 형식과 데이터를 정렬하는 데 필요한 패딩 바이트를 포함하는 크기(바이트)를 반환합니다. 이렇게 하면 각 개체의 데이터가 적절하게 정렬되도록 하면서 동일하거나 다른 형식의 인스턴스 집합을 버퍼로 직렬화할 수 있습니다. MyType_AlignSize pObject가 가리키는 instance 8에 정렬된 오프셋에서 시작하는 버퍼로 마샬링된다고 가정합니다.

암시적 핸들의 경우:

size_t MyType_AlignSize (MyType __RPC_FAR * pObject);

명시적 핸들의 경우:

size_t MyType_AlignSize (handle_t Handle, MyType __RPC_FAR * pObject);

암시적 바인딩 핸들이 있는 원격 프로시저와 암시적 serialization 핸들이 있는 직렬화된 형식은 모두 동일한 전역 핸들 변수를 사용합니다. 따라서 인터페이스의 형식 serialization 및 원격 프로시저를 암시적 핸들과 혼합하지 않는 것이 좋습니다. 자세한 내용은 암시적 핸들과 명시적 핸들을 참조하세요.