#using指令(C++)
将元数据导入程序编译 /clr。
#using file [as_friend]
参数
file
MSIL .dll, .exe,。 .netmodule 或 .obj。 例如,#using <MyComponent.dll>
as_friend
指定所有类型 file 是可访问的。 有关更多信息,请参见 友元程序集 (C++)。
备注
file 可以是您为其托管数据导入和管理构造的 Microsoft 中间语言 (msil) 文件。 如果 .dll 文件包含一个程序集清单,则导入清单中引用的所有 .dll,并将生成的程序集在元数据 中 的 文件 ,程序集引用。
如果 file 不包含程序集 (如果 file 是模块),并且,如果您在当前 (程序集) 应用程序不想使用从模块的类型信息,则具有清单的选项模块作为部分程序集;使用 /ASSEMBLYMODULE。 模块中的类型和被引用程序集的所有应用程序都可用。
使用 #using 的替代项为 /FU 编译器选项。
应生成 .exe 程序集传递给 #using 与 /clr:safe 或 /clr:pure,或者与任何其他 Visual Studio 编译器 (如 Visual Basic 或 Visual C#,)。 尝试从 .exe 程序集导入元数据编译 /clr 导致文件加载异常。
备注
使用引用 #using 的元素可以运行带有文件的不同版本导入在编译时,导致客户端应用程序产生意外的结果。
为了让编译器识别出程序集中的类型(而不是模块),需要强制解析类型,例如可以通过定义此类型的实例来完成。 也有其他方法来为编译器解析程序集中的类型名称,例如,如果从一个程序集的类型继承,编译器就会知道此类型名称。
当导入生成的元数据从使用 __declspec (线程)中的源代码,线程语义在元数据不会保留。 例如,通过 #using声明 __declspec (线程),生成将作为 .NET framework 公共语言运行时生成的程序,然后导入的变量,将不再具有在变量中 __declspec (线程) 语义。
所有导入的类型 (管理和本机) 在 #using 引用的文件可用,但是,编译器将本机类型作为不是声明定义。
,在使用编译 /clr时, mscorlib.dll 自动引用。
LIBPATH 环境变量指定要搜索的目录,则编译器尝试解析文件名传递给 #using时。
编译器将搜索沿下列路径引用:
在 #using 语句中指定的路径。
当前目录。
.NET framework 系统目录。
从目录添加与 /AI 编译器选项。
在 LIBPATH 环境变量的内容。
示例
如果您生成程序集 (c) 和引用自身引用其他程序集) 的程序集 (b),您不需要显式引用程序集 A,除非您显式使用一个来输入 C。
// 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() {}
};
在下面的示例中,,因为程序在 using_assembly_A.cpp,不使用任何一个类型定义没有未引用的 using_assembly_A.dll 编译器错误。
// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
B b;
b.Test();
}