Директивы #using (C++)
Будет импортировать метаданные в программу компилированную с /clr.
#using file [as_friend]
Параметры
file
MSIL .dll (exe).netmodule или obj.Например:#using <MyComponent.dll>
as_friend
Указывает, что все типы в file доступны.Дополнительные сведения см. в разделе Дружественные сборки (C++).
Заметки
file может быть файл MSIL, импорте для управляемых данных и управляемых конструкций.Если DLL-файл содержащий манифест сборки, то импортированы все .dlls, на которые имеются ссылки в манифесте и сборка построении перечислены файл в метаданных в качестве ссылки на сборку.
If file не содержит сборку (если file модуль) и если не планируется использовать информацию о типах из модуля в текущем приложении (сборки) можно просто указав, что модуль является частью сборки; используйте /ASSEMBLYMODULE.Типы в модуль затем имели бы в любое приложение, которое ссылается на сборку.
Альтернативы для использования #using/FU параметр компилятора.
Сборки exe, передаваемые #using компилироваться с /clr:safe OR /clr:pureили с любым другие компиляторы Visual Studio (Visual Basic или Visual c#, например).При попытке импортировать метаданные из сборки exe компилированной с /clr приведет к возникновению исключения при загрузке файла.
![]() |
---|
Компонент, который ссылается на #using можно выполнить с другоем версии файла импортированного во время компиляции, вызывать клиентское приложение дать непредвиденные результаты. |
Чтобы компилятор мог распознавать тип в сборке (не в модуле), ему следует указать принудительно разрешать типы. Это можно сделать, например, определив экземпляр типа.Возможны и другие способы разрешения компилятором имен типов в сборке. Например, если тип наследуется от типа в сборке, его имя будет распознаваться компилятором.
Метаданные, созданные при импортировании из исходного кода, который использует __declspec (поток)семантика потока не упорствована в метаданных.Например, переменная, объявленная с __declspec (поток), компилироваться в программе, построение для среды CLR платформы .NET Framework, а затем импортировано с помощью #usingбольше не нет __declspec (поток) семантика для переменной.
Все импортированные типы (как управляемый, так и собственного) в файле, на который ссылается by #using доступны, но компилятор рассматривает собственные типы в качестве определения объявлений нет.
mscorlib.dll автоматически ссылается при компилировании с /clr.
Переменная среды LIBPATH указывает каталоги, которые будут производится, когда компилятор пытается разрешить имена файлов, передаваемые #using.
Компилятор будет выполнять поиск для ссылок на следующие пути:
Путь, указанный в #using выписка.
Текущий каталог.
Системный каталог платформы .NET Framework.
Каталоги, добавленные с /AI параметр компилятора.
Каталоги в переменной среды LIBPATH.
Пример
При построении сборки (c) и (B ссылке на сборку самого), выдающую ссылки на другую сборку (a), необходимо явно ссылаться на сборку a, если явно не будет использовать один из типов c в 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() {}
};
В следующем образце ошибка компилятора для не будет ссылок на using_assembly_A.dll поскольку программа не использует заданные типы в using_assembly_A.cpp.
// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
B b;
b.Test();
}