호환되지 않는 변경의 예
호환되지 않는 변경 내용을 처리할 때 엄지 손가락의 불행한 규칙은 다음과 같습니다. 모든 변경 내용은 잘 이해되지 않는 한 이전 버전과 호환되지 않을 수 있습니다. 이 규칙에는 NDR 규칙에 대한 지식이 필요합니다. NDR이 무엇인지 모르는 경우 수정하지 마세요. 일반적으로 애플리케이션에서 액세스 위반 또는 마샬링 엔진에서 발생한 BAD_STUB_DATA_EXCEPTION 발생하는 변경의 예는 다음과 같습니다.
- 이전 메서드 중간에 새 메서드를 추가합니다.
- 메서드에서 매개 변수 추가 또는 제거
- 특성 변경(예: 포인터 특성): [ref]를 [unique] 또는 [ptr]로 변경하거나 그 반대의 경우도 마찬가지입니다. 각 포인터 형식에는 서로 다른 와이어 표현이 있습니다.
- 데이터의 크기 변경: 짧은 크기에서 long으로, char에서 wchar_t(유니코드)로 변경하고, 구조체에 필드를 추가하고, 고정 크기 배열의 크기를 변경합니다.
- 기본 절을 사용하여 공용 구조체에 공용 구조체 팔 추가
클라이언트와 서버 간의 일부 교활한 변경 또는 의도하지 않은 불일치는 다음과 같이 발생할 수 있습니다.
- 구조체 또는 배열과 같은 복합 형식의 멤버 수정 예를 들어 CLIENT_ID 정수에서 GUID로 변경되면 CLIENT_ID 필드가 있는 CLIENT_RECORD 구조체가 호환되지 않습니다. 실제 원격 매개 변수 형식에 여러 수준의 포함을 통해 연속되는지 감지하기 어려울 수 있습니다.
- 가져온 형식 수정 형식은 직접 원격하지 않는 다른 구성 요소에서 제공될 수 있으므로 변경 내용이 호환되는 것으로 생각되었습니다.
- IDL 파일에서 #ifdef 사용하는 것은 IDL 파일의 ifdef 형식 정의에 잘못된 생각입니다. 재해가 발생하기를 기다리고 있습니다. 필연적으로 빌드 또는 기타 결함으로 인해 클라이언트는 서버와 다른 정의 집합으로 컴파일되고 결국 호환되지 않습니다.