3.0 Microsoft IDL(Interface Definition Language) 문제 해결

아래 문제 해결 표의 증상과 해결 방법은 새 코드를 잘라내든, 기존 앱을 포팅하든 간에 유용할 수 있습니다.

참고

MIDL(Microsoft Interface Definition Language) 3.0의 목적은 IDL(Interface Definition Language) 파일(.idl파일) 내에서 Windows 런타임 형식을 정의하는 것입니다. MIDL 3.0은 C++/WinRT 런타임 클래스를 정의하는 데 특히 편리한 방법입니다. 자세한 정보 및 배경은 Microsoft 인터페이스 정의 언어 3.0 소개를 참조하세요.

IDL 파일은 일반적으로 COM 형식을 정의하는 데 사용되었습니다. 따라서 MIDL 3.0은 확장된 구문과 함께 IDL 파일을 사용하는 새롭고 다른 방법을 나타냅니다. IDL 파일을 사용하여 비 Windows 런타임 형식(COM 형식)을 정의하는 방법에 대한 자세한 내용은 Microsoft 인터페이스 정의 언어를 참조하세요.

증상 및 해결 방법

증상 해결책
Visual Studio 컴파일하면 "ERROR MIDL2003: [msg]redefinition [context]: IUnknown"이 발생하며 다른 많은 유사한 오류가 발생합니다. 시스템 네임스페이스에 있는 모든 형식을 자동으로 참조하도록 도구 체인이 설정됩니다. IDL 파일에서 Windows 네임스페이스에 대한 지시 import 문을 제거합니다. 프로젝트에서 정의한 형식에만 필요합니다import.
error MIDL2009: [msg]undefined symbol [context]: IInspectable. 시스템 네임스페이스에서 형식을 자동으로 가져오도록 도구 체인이 설정 되지 않았습니다 . 명령줄에서 사용하는 midl.exe 경우 정의 구조를 확인하고 명령줄에서 midl.exe 호출 하여 올바른 명령줄 구문, 특히 스위치 사용을 /reference 참조하세요. 또는 C++/WinRT Visual Studio 확장(VSIX)을 사용하여 Visual Studio 사용하여 IDL 파일을 컴파일합니다(C++/WinRT 및 VSIX에 대한 Visual Studio 지원 참조). 이러한 작업을 수행하는 경우 IDL 파일에 대한 Windows.Foundation.idl 지시문을 추가할 import 필요가 없습니다. 그러나 프로젝트에서 정의한 import 형식을 참조하는 경우 추가 IDL을 가져오려면 지시문이 필요합니다.
error MIDL2011 : [msg]unresolved type declaration [context]:, 뒤에 형식 이름이 있습니다. IDL 파일에서 프로젝트에서 정의한 import 모든 형식의 정의를 포함하는 IDL 파일에 대한 지시문을 추가합니다.
오류 MIDL2025: [msg]구문 오류 [context]: 예상 > 또는 ">>" 근처 템플릿 닫는 문자 쌍이 오른쪽 시프트 연산자로 잘못 해석되지 않도록 두 > 문자 사이에 공백을 삽입합니다.
오류 MIDL2025: [msg]구문 오류 [context]: 예상 > 또는 근사 "[" 이 오류는 매개 변수가 있는 인터페이스에 대한 매개 변수 형식 인수로 배열을 사용하는 경우에 발생할 수 있습니다. 이렇게 하는 것은 유효하지 않습니다. 그러나 자세한 내용과 잠재적인 솔루션은 매개 변수가 있는 형식을 참조하세요.
Windows 앱 인증 키트 테스트에서 런타임 클래스 중 하나가 “Windows 기본 클래스에서 파생되지 않았습니다. 구성 가능한 모든 클래스는 궁극적으로 Windows 네임스페이스의 형식에서 파생되어야 합니다.” 오류를 생성합니다. 기본 클래스에서 파생되는 모든 런타임 클래스(애플리케이션에서 정의)를 구성 가능한 클래스라고 합니다. 구성 가능 클래스의 최종 기본 클래스는 Windows.* 네임스페이스에서 시작되는 형식(예: Windows.UI.Xaml.DependencyObject)이어야 합니다. 자세한 내용은 XAML 컨트롤, C++/WinRT 속성에 바인딩을 참조하세요.
Visual Studio 컴파일하면 "오류 MIDL5148: [msg]클래식 WinRT IDL 구문을 최신 WinRT IDL 형식에서 사용할 수 없습니다."가 발생합니다. MIDL 3.0 파일에서 MIDL 1.0 또는 2.0 구문을 사용하고 있습니다. 배경 정보는 MIDL 1.0, 2.0 및 3.0을 참조하세요.
MIDL4035 [msg][in] 매개 변수에는 유효하지 않은 포인터 형식이 있습니다. 일부 입력 매개 변수는 포인터로 전달되지만 포인터 형식이 잘못되었습니다. 일반적으로 구조체가 아닌 ref const 형식과 함께 사용되었거나 ref 값 형식과 함께 사용된 기호입니다. 오류 메시지에 언급된 특성은 [in] 실제로 오류가 키워드가 없는 매개 변수인 입력 매개 변수와 out 관련이 있음을 의미합니다. [in] 특성 자체는 MIDL 3.0에서 유효한 특성이 아니므로 코드에 표시되지 않습니다.