Директива #using (C++/CLI)

Импорт метаданных в программу, скомпилированную с помощью /clr.

Синтаксис

#usingfile [as_friend]

Параметры

файл
Файл msil .dll, .exe, .netmoduleили .obj . Например,

#using <MyComponent.dll>

as_friend
Указывает, что все типы в файле доступны. Дополнительные сведения см. в разделе Дружественные сборки (C++).

Комментарии

Файл может быть msil-файлом майкрософт, импортируемым для управляемых данных и управляемых конструкций. Если библиотека DLL содержит манифест сборки, импортируются все библиотеки DLL, указанные в манифесте. Сборка, которую вы создаете, будет перечислять файл в метаданных в виде ссылки на сборку.

Возможно , файл не содержит сборку (файл является модулем), и вы не планируете использовать сведения о типе из модуля в текущем (сборке) приложении. Можно указать, что модуль является частью сборки, используя параметр /ASSEMBLYMODULE. После этого типы из этого модуля будут доступны любому приложению, ссылки на которые содержатся в этой сборке.

Альтернативой для использования #using является параметр компилятора /FU .

.exe сборки, передаваемые в #using , должны компилироваться с помощью одного из компиляторов .NET Visual Studio (например, Visual Basic или Visual C#). При попытке импортировать метаданные из сборки файла .exe, скомпилированной с параметром /clr, возникнет исключение загрузки файла.

Примечание

Компонент, на который ссылается , #using может выполняться с другой версией файла, импортированного во время компиляции, в результате чего клиентское приложение дает непредвиденные результаты.

Чтобы компилятор распознал тип в сборке (а не в модуле), его необходимо принудительно разрешить. Его можно принудительно, например, определить экземпляр типа . Существуют и другие способы разрешения имен типов в сборке компилятора. Например, при наследовании от типа в сборке имя типа становится известным компилятору.

При импорте метаданных, созданных из исходного кода, который использовал __declspec(thread), семантика потока не сохраняется в метаданных. Например, переменная, объявленная с __declspec(thread)помощью , скомпилированная в программе, которая создана для платформа .NET Framework среды CLR, а затем импортирована с помощью #using, не будет иметь __declspec(thread) семантики для переменной.

Все импортированные типы (как управляемые, так и собственные) в файле, на который #using ссылается , доступны, но компилятор рассматривает собственные типы как объявления, а не определения.

При компиляции с параметром /clr ссылка на файл mscorlib.dll создается автоматически.

Переменная среды LIBPATH указывает каталоги для поиска, когда компилятор разрешает имена файлов, передаваемые в #using.

Компилятор ищет ссылки по следующему пути:

  • Путь, указанный в инструкции #using .

  • Текущий каталог.

  • Системный каталог .NET Framework.

  • Каталоги, добавленные с параметром /AI компилятора.

  • Каталоги, указанные в переменной среды LIBPATH.

Примеры

Можно создать сборку, которая ссылается на вторую сборку, которая сама ссылается на третью сборку. Необходимо явно ссылаться на третью сборку из первой, только если вы явно используете один из ее типов.

Исходный файл using_assembly_A.cpp:

// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};

Исходный файл using_assembly_B.cpp:

// 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();
}

См. также раздел

Директивы препроцессора