원격 인터페이스 디자인
분산 구성 요소 개체 모델이 등장하면서 사용자 지정 인터페이스를 프로세스에서만 사용하려는 경우에도 원격으로 사용할 수 있어야 합니다.
MIDL은 인터페이스에 대한 헤더 파일을 생성하는 방법 이상입니다. 컴퓨터, 프로세스 및 스레드 경계에서 인터페이스를 사용할 수 있는 원격 프로그래밍 언어입니다. 즉, 고객에게 프로그램을 릴리스하기 전에 이러한 조건에서 MIDL 정의 인터페이스의 동작을 확인해야 합니다. IDL에서 실수를 했고 인터페이스가 올바르게 원격되지 않은 경우 해당 실수를 해결하기 어려울 수 있습니다. 새 IID로 인터페이스를 수정하고 이전 버전과의 호환성을 위해 이전 IID를 그대로 두어야 하거나 모든 클라이언트와 모든 서버 머신을 동시에 변환해야 합니다.
인터페이스가 out-of-process로 사용되지 않더라도 스레드 간을 사용할 수 있습니다. 선택되지 않은 IDL 파일에 대한 최악의 문제는 여러 단일 스레드 아파트를 지원하지 않는 In-Process 서버에서 발생할 수 있습니다.) 스레딩 모델을 지정하지 않는 서버는 암시적으로 단일 스레드입니다. 단일 스레드로 표시된 모든 항목은 먼저 CoInitialize 또는 CoInitializeEx라는 스레드로 강제 강제 적용됩니다. 다른 스레드가 개체를 활성화한 스레드인 경우 해당 단일 스레드 서버의 모든 인터페이스를 활성화 스레드로 다시 원격화해야 하며, 이로 인해 QueryInterface 호출에 대한 응답으로 REGDB_E_IIDNOTREG 반환될 수 있습니다. 인터페이스가 In-process이고 항상 동일한 스레드에서 호출될 것이라고 절대적으로 어설션할 수 없다면, 언제든지 원격으로 연결됩니다.
마지막으로 인터페이스 디자이너로서 클라이언트 애플리케이션에서 인터페이스를 사용하는 방법을 고려해야 합니다. 인터페이스가 프로세스와 컴퓨터 경계를 넘어 효율적으로 처리되는지 여부, 즉 인터페이스 경계를 넘어 메서드 호출 빈도와 지정된 메서드 호출에서 전송할 데이터의 양이라는 두 가지가 함께 결정됩니다. COM은 프로세스 간 및 네트워크 간 호출을 프로그램에 투명하게 만들지만 주소 공간에서 고주파 및 높은 대역폭 호출을 효율적으로 만들 수는 없습니다. 경우에 따라 일반적으로 In-Process 서버로만 구현되는 인터페이스를 디자인하는 것이 더 적절하지만 다른 인터페이스는 원격 사용에 더 적합합니다.