특정 32비트 또는 64비트 플랫폼에 대한 스텁 대상 지정

Microsoft RPC 및 MIDL 3.0 이상 컴파일러의 일부 기능은 플랫폼별로 다릅니다.

예방 조치로 MIDL 3.0 이상 컴파일러는 C 컴파일 단계 중에 호환성 검사 용이하게 하는 가드를 생성합니다. MIDL은 플랫폼 종속 가드(32비트 및 64비트)와 릴리스 종속 가드(기능 집합 종속성)의 두 가지 유형의 가드를 생성합니다. 예를 들어 MIDL은 다른 플랫폼에 대한 32비트 스텁의 C 컴파일을 방지하기 위해 다음 가드를 생성합니다.

#if !defined(__RPC_WIN32__)
#error  Invalid build platform for this stub.
#endif

릴리스 종속 가드는 처리된 IDL 파일 및 /target 스위치에 있는 기능 집합에 의해 트리거됩니다. 예를 들어 인터페이스에서 Windows 2000 이상에서만 지원되는 기능을 사용하는 경우 MIDL은 TARGET_IS_NT50_OR_LATER 매크로를 사용하여 가드를 생성합니다.

Rpcndr.h에 정의된 가드 매크로는 WINVER 및 _WIN32_WINNT 설정에 따라 달라지고 C/C++ 컴파일러에서 평가됩니다.

C 컴파일 시간에 스텁을 실행하기 위해 특정 플랫폼이 필요하다는 오류 메시지가 표시되는 경우 먼저 이 플랫폼에서 사용할 수 없는 기능을 사용하지 않았는지 확인하기 위해 검사. 특정 가드를 트리거하는 기능은 가드 본문에 나열됩니다. 이전 예제에서 -Oicf 컴파일러 스위치는 가드를 트리거했습니다. 이러한 종류의 주목할 만한 기능에는 Windows 2000 이상에서 사용할 수 있는 /robust 스위치 및 [async] 특성, 파이프 형식 생성자, /Oif 컴파일러 옵션 및 [user_marshal] 및 [wire_marshal] 특성이 있습니다. 이러한 기능을 사용하는 스텁은 이전 시스템에서 실행되지 않습니다.

대상 플랫폼이 사용 중인 기능에 대해 올바르고 여전히 오류가 발생하는 경우 환경 변수를 적절하게 설정해야 할 수 있습니다.

Windows 2000 이상 릴리스용으로 빌드하려면

  • 메이크파일에 다음 줄을 추가합니다.

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/강력한

async

async_uuid

/Oi

파이프

wire_marshal

user_marshal

OLE 데이터 형식 마샬링