#using 지시문 (C++)
/clr을 사용하여 컴파일된 프로그램에 메타 데이터를 가져온다.
#using file [as_friend]
매개 변수
file
MSIL.dll,.exe,.netmodule 또는. obj. 예를 들면 다음과 같습니다.#using <MyComponent.dll>
as_friend
file 의 모든 형식이 액세스할 수 있도록 지정합니다. 자세한 내용은 Friend 어셈블리 (C++)을 참조하십시오.
설명
file 은 관리되는 데이터와 관리되는 구문에 대해 가져오는 Microsoft 중간 언어 (MSIL) 파일이 될 수 있습니다. 모든 .dll 파일이 어셈블리 매니페스트를 포함하면 매니페스트에서 참조하는 모든.dll은 불러와지게 되고 빌드하는 어셈블리는 어셈플리 참조로 메타 데이터에서 파일 을 나열합니다.
만약 file 이 ( file 이 모듈일 때) 어셈블리가 포함 되어 있지 않고 현재 (어셈블리)응용 프로그램에서 모듈로 부터의 형식 정보를 사용하지 않으면,모듈은 어셈블리의 부분임을 나타내는 옵션을 갖게 됩니다.; /ASSEMBLYMODULE을 사용합니다. 모듈에서 형식은 어셈블리를 참조하는 모든 응용 프로그램에 사용할 수 있습니다.
#using 을 사용하기 위한 대안은 /FU 컴파일러 옵션입니다.
#using 에 전달된 .exe 어셈블리는 /clr:safe 또는 /clr:pure를 사용하거나 (예를 들어, Visual Basic 또는 Visual C#) 다른 Visual Studio 컴파일러를 사용하여 컴파일되어야 합니다. /clr 를 사용하여 컴파일된 .exe 어셈블리에서 메타데이터를 가져오는 것은 파일 로드 예외가 발생합니다.
참고
#using 을 참조하는 구성 요소는 클라이언트 응용 프로그램에서 예기치 않은 결과가 발생하는 컴파일 타임에서 가져올 파일의 다른 버전을 사용하여 실행될 수 있습니다.
컴파일러가 모듈이 아니라 어셈블리에서 특정 형식을 인식하려면 해당 형식을 확인할 수 있어야 합니다. 예를 들면, 해당 형식의 인스턴스를 정의하여 형식을 확인할 수 있습니다. 컴파일러는 다른 방법을 사용하여 어셈블리에서 형식 이름을 확인할 수 있습니다. 예를 들어, 어셈블리에서 특정 형식을 상속하면 해당 형식 이름이 컴파일러에 전달됩니다.
__declspec(thread)에 사용되는 소스 코드에서 작성된 메타 데이터를 가져올 때, 스레드 의미는 메타 데이터에 유지되지 않습니다. 예를 들어, **__declspec(thread)**를 사용하여 선언된 변수, NET Framework 공용 언어 런타임에 대해 빌드된 프로그램에서 컴파일된 변수, #using 을 통해 가져와진 변수는 더 이상 변수에서 __declspec (thread) 의미 체계를 갖지 않습니다.
#using에 의해 참조되는 파일에서 가져온 모든 형식 (관리 및 네이티브)을 사용할 수 있지만, 컴파일러 네이티브 는 형식 선언을 정의 하지 않는 것을 취급합니다.
/clr을 사용하여 컴파일하는 경우에 자동으로 mscorlib.dll는 참조됩니다.
LIBPATH 환경 변수는 컴파일러가 #using 로 전달된 파일 이름을 확인하려고 할 때 검색될 디렉터리를 지정합니다.
컴파일러는 다음과 같은 경로에 따라 참조에 대해 검색합니다:
#using 문에서 지정된 경로입니다.
현재 디렉터리
.NET Framework 시스템 디렉터리입니다.
디렉터리는 /AI 컴파일러 옵션을 사용하여 추가됩니다.
LIBPATH 환경 변수에 대한 디렉터리입니다.
예제
사용자가 어셈블리 (C)와 또다른 어셈블리 (A)를 참조하는 어셈블리 (B)를 빌드하면, C에서 A의 형식을 명시적으로 사용하지 않을 경우 명시적으로 어셈블리 A를 참조하지 않아야 합니다.
// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};
// using_assembly_B.cpp
// compile with: /clr /LD
#using "using_assembly_A.dll"
public ref class B {
public:
void Test(A a) {}
void Test() {}
};
다음 샘플에서는, 프로그램이 _assembly_A.cpp에 정의된 형식 중 하나를 사용하지 않으므로 _assembly_A.dll을 사용하여 참조를 하지 않는 컴파일러 오류가 발생하지 않습니다.
// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
B b;
b.Test();
}