Compartilhar via


Diretiva #using (C++)

Importa metadados para um programa compilado com /clr.

#using file [as_friend]

Parâmetros

  • file
    Um MSIL .dll, .exe, .netmodule ou .obj. Por exemplo,

    #using <MyComponent.dll>

  • as_friend
    Especifica que todos os tipos em file são acessíveis. Para obter mais informações, consulte Friend Assemblies (C++).

Comentários

file pode ser um arquivo de linguagem intermediária da Microsoft (MSIL) que você importa para seus dados gerenciados e construções gerenciadas. Se um arquivo .dll contém um manifesto do assembly, todos os .dlls referenciados no manifesto são importados, e o assembly que você está criando listará o arquivo dos metadados como uma referência de assembly.

Se file não contém um assembly (se file é um módulo) e se você não quer usar as informações de tipo do módulo no aplicativo atual (assembly), pode apenas indicar que o módulo faz parte do assembly; use /ASSEMBLYMODULE. Então, os tipos no módulo estariam disponíveis para qualquer aplicativo que fizesse referência ao assembly.

Uma alternativa ai uso de #using é a opção de compilador /FU.

os assemblies de .exe transmitidos para #using devem ser compilados com /clr:safe ou /clr:pure ou com qualquer um dos outros compiladores do Visual Studio (Visual Basic ou Visual C#, por exemplo). Tentar importar metadados de um assembly .exe compilado com /clr resultará em uma exceção de carregamento de arquivo.

Dica

Um componente que é referenciado com #using pode ser executado com outra versão do arquivo importado no tempo de compilação, fazendo com que um aplicativo cliente gere resultados inesperados.

Para que o compilador reconheça um tipo em um assembly (não um módulo), ele precisa ser forçado a resolver o tipo, que você pode fazer, por exemplo, definindo uma instância do tipo. Há outras maneiras de resolver nomes de tipo em um assembly para o compilador, por exemplo, se você herda de um tipo em um assembly, o nome do tipo se tornará, então, conhecido do compilador.

Ao importar metadados criados a partir do código-fonte que usou __declspec (thread), a semântica de thread não persiste nos metadados. Por exemplo, uma variável declarada com __declspec(thread), compilada em um programa que é criado para o .NET Framework Common Language Runtime e, então, importada via #using não terá mais a semântica de __declspec(thread) na variável.

Todos os tipos importados (gerenciados e nativos) em um arquivo referenciado por #using estão disponíveis, mas o compilador tratará os tipos nativos como declarações, não como definições.

mscorlib.dll é referenciado automaticamente durante a compilação com /clr.

A variável de ambiente LIBPATH especifica os diretórios que serão pesquisados quando o compilador tentar resolver os nomes de arquivo transmitidos para #using.

O compilador pesquisará referências ao longo do seguinte caminho:

  • Um caminho especificado na instrução #using.

  • O diretório atual.

  • O diretório do sistema do .NET Framework.

  • Diretórios adicionados com a opção de compilador /AI.

  • Diretórios na variável de ambiente LIBPATH.

Exemplo

Se você criar um assembly (C) e fizer referência a um assembly (B) que faz referência a outro assembly (A), não terá que fazer referência explicitamente ao assembly A, a menos que use explicitamente um dos tipos de A em 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() {}
};

No exemplo a seguir, não há erros do compilador por não fazer referência usando _assembly_A.dll, pois o programa não usa nenhum dos tipos definidos no uso de _assembly_A.cpp.

// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
   B b;
   b.Test();
}

Consulte também

Referência

Diretivas de pré-processador