Compartir a través de


Directiva #import (C++)

específico de C++

Se utiliza para escribir información de una biblioteca de tipos.El contenido de la biblioteca de tipos se convierte en las clases de C++, describe fundamentalmente las interfaces COM.

#import "filename" [attributes]
#import <filename> [attributes]

Parámetros

  • filename
    especifica la biblioteca de tipos para importar.filename puede ser:

    • El nombre de un archivo que contiene una biblioteca de tipos, como un .olb, .tlb, o el archivo .dll.La palabra clave, archivo:, puede preceder a cada nombre de archivo.

    • el progid de un control en la biblioteca de tipos.La palabra clave, progid:, puede preceder a los progid.Por ejemplo:

      #import "progid:my.prog.id.1.5"
      

      Para obtener más información sobre progids, vea Especificar el identificador y el número de versión de localización.

      Tenga en cuenta que al compilar con un compilador cruzado en un sistema operativo de 64 bits, el compilador podrá en readonly el subárbol del registro de 32 bits.Puede utilizar el compilador de 64 bits nativo para compilar y registrar una biblioteca de tipos de 64 bits.

    • El identificador de biblioteca de tipos.La palabra clave, libid:, puede preceder a cada identificador de bibliotecaPor ejemplo:

      #import "libid:12341234-1234-1234-1234-123412341234" version("4.0") lcid("9")
      

      Si no especifica la versión o el LCID, reglas que se aplican a progid: también se aplica a libid:.

    • un archivo ejecutable (.exe).

    • Un archivo de biblioteca (.dll) que contiene un recurso de biblioteca de tipos (como .ocx).

    • Un documento compuesto que mantiene una biblioteca de tipos.

    • cualquier otro formato de archivo que se pueda entender por LoadTypeLib API.

  • attributes
    uno o más atributos #import.Separa los atributos con un espacio en blanco o con una coma.Por ejemplo:

    #import "..\drawctl\drawctl.tlb" no_namespace, raw_interfaces_only
    

    O bien

    #import "..\drawctl\drawctl.tlb" no_namespace raw_interfaces_only
    

Comentarios

Buscar pedido del nombre de archivo

el nombre de archivo es precedido opcionalmente mediante la especificación de un directorio.El nombre de archivo debe llamar a un archivo existente.La diferencia entre las dos formas de sintaxis es el orden en el que el preprocesador buscar archivos de biblioteca de tipos cuando la ruta que se especifica.

Formato de sintaxis

Acción

Formulario comillas

Indica al preprocesador para buscar archivos de biblioteca de tipos primero en el directorio del archivo que contiene la instrucción de #import y, en los directorios de los archivos que incluyen (#include) ese archivo.Las búsquedas de preprocesador después a lo largo de las rutas de acceso que aparecen a continuación.

Formulario de corchete angular

Indica al preprocesador para buscar archivos de biblioteca de tipos en las siguientes rutas:

  1. La lista de rutas de la variable de entorno PATH

  2. La lista de rutas de la variable de entorno LIB

  3. La ruta de acceso especificada por la opción de compilador /I (directorios de inclusión adicionales), excepto que el compilador busca una biblioteca de tipos que se hizo referencia de otra biblioteca de tipos con el atributo de no_registry .

Especificar el identificador y el número de versión de localización

Cuando se especifica un progid, también puede especificar el identificador de localización y el número de versión progid.Por ejemplo:

#import "progid:my.prog.id" lcid("0") version("4.0)

Si no especifica un identificador de localización, un progid se elige según las reglas siguientes:

  • Si solo hay un identificador de localización, aquél se utiliza.

  • Si hay más de un identificador de localización, primero con el número de versión 0, 9, 409 se utiliza.

  • Si hay más de un identificador de localización y ninguno de ellos son 0, 9, 409, se utiliza el último.

  • Si no especifica un número de versión, se utiliza la versión más reciente.

archivos de encabezado creados por la importación

#import crea dos archivos de encabezado que restaura el contenido de la biblioteca de tipos en el código fuente de C++.El archivo de encabezado principal es similar a generado por el compilador (MIDL) de Lenguaje de definición de interfaz de Microsoft, pero con código generado por el compilador adicional y datos.archivo de encabezado principal tiene el mismo nombre base que la biblioteca de tipos, más una extensión de .TLH.el archivo de encabezado secundario tiene el mismo nombre base que la biblioteca de tipos, con una extensión de .TLI.Contiene implementaciones para las funciones compilador-generadas miembro, y se incluye (#include) en el archivo de encabezado principal.

Si importa una propiedad dispinterface que utilice parámetros byref, #import no generará la instrucción __declspec (propiedad) para la función.

Ambos archivos de encabezado se colocan en el directorio de resultados especificado por la opción /Fo (archivo objeto de nombre).Constituyen leídos y compilados por el compilador como si el archivo de encabezado principal se denomina por una directiva de #include .

Las optimizaciones del compilador siguientes suponen la directiva de #import :

  • El archivo de encabezado, cuando se crean, tiene la misma marca de tiempo que la biblioteca.

  • Cuando se procesa #import , el compilador comprueba primero si el encabezado existe y está actualizado.En caso afirmativo, entonces no necesita reconstruirla.

La directiva de #import también participa en recompilaciones y puede colocarse en un archivo de encabezado precompilado.Vea Crear archivos de encabezado precompilados para obtener más información.

8etzzkb6.collapse_all(es-es,VS.110).gifArchivo de encabezado principal de la biblioteca de tipos

El archivo de encabezado principal de la biblioteca de tipos se compone de siete secciones:

  • Plancha de caldera de encabezado: Consta de los comentarios, la instrucción de #include para COMDEF.H (que defina algunas macros estándar utilizadas en el encabezado), y otra información de instalación diferente.

  • Referencias adelantadas y typedefs: Consta de declaraciones de la estructura como struct IMyInterface y definiciones de tipos.

  • Declaraciones inteligentes de puntero: La clase de plantilla _com_ptr_t es una implementación de SMART-puntero que encapsula punteros de interfaz y elimina la necesidad de llamar a AddRef, Liberar, funciones de QueryInterface .además, oculta la llamada de CoCreateInstance en crear un nuevo objeto COM.Esta sección utiliza la instrucción de macro _COM_SMARTPTR_TYPEDEF para establecer tipos de interfaces COM para ser especializaciones de la plantilla de clase de plantilla de _com_ptr_t .por ejemplo, para la interfaz IMyInterface, el archivo de .TLH contendrá:

    _COM_SMARTPTR_TYPEDEF(IMyInterface, __uuidof(IMyInterface));
    

    qué se expandirá el compilador:

    typedef _com_ptr_t<_com_IIID<IMyInterface, __uuidof(IMyInterface)> > IMyInterfacePtr;
    

    El tipo IMyInterfacePtr puede ser utilizado en lugar del puntero sin formato IMyInterface*de interfaz.Por consiguiente, no hay necesidad de llamar varias funciones miembro de IUnknown

  • declaraciones de Typeinfo: Consta de principalmente las definiciones de clase y otros elementos que exponen los elementos individuales de typeinfo devueltos por ITypeLib: GetTypeInfo.En esta sección, cada typeinfo de la biblioteca de tipos se refleja en el encabezado de un dependiente del formulario en la información de TYPEKIND .

  • Definición heredada opcional de GUID: Contiene inicializaciones de las constantes con nombre de GUID.Éstos son nombres de formulario CLSID_CoClass y IID_Interface, similares a los generados por el compilador de MIDL.

  • instrucción de#include para el encabezado secundario de la biblioteca de tipos.

  • Plancha de caldera de pie de página: Actualmente #pragma pack(pop).

Todas las secciones, excepto la sección de la plancha de caldera de encabezado y de la plancha de caldera de pie de página, se agregan en un espacio de nombres con el nombre especificado por la instrucción de biblioteca en el archivo original IDL.Puede utilizar los nombres de encabezado de la biblioteca de tipos cualquiera por una calificación explícita con el nombre del espacio de nombres o incluyendo la siguiente instrucción:

using namespace MyLib;

inmediatamente después de la instrucción de #import en el código fuente.

El espacio de nombres se puede evitar utilizando el atributo de no_namespace de la directiva de #import .Sin embargo, la supresión del espacio de nombres puede llegar a conflictos.El espacio de nombres también se puede cambiar por el atributo de rename_namespace .

El compilador proporciona la ruta de acceso completa a cualquier dependencia de la biblioteca de tipos necesaria para la biblioteca de tipos que está actualmente procesamiento.La ruta de acceso se escribe, en forma de comentarios, en el encabezado de la biblioteca de tipos (.TLH) que el compilador genera para cada biblioteca de tipos procesada.

Si una biblioteca de tipos contiene referencias a los tipos definidos en otras bibliotecas de tipos, el archivo de .TLH incluirá comentarios de ordenación siguiente:

//
// Cross-referenced type libraries:
//
//  #import "c:\path\typelib0.tlb"
//

El nombre de archivo real en el comentario de #import es la ruta de acceso completa de la biblioteca de tipos hace referencia cruzada, tal como se almacena en el registro.Si detecta errores que se deben a las definiciones de tipos que falta, compruebe los comentarios del administrador de .TLH para ver que las bibliotecas de tipos dependientes pueden requerir importarlo primero.Los errores probables son errores de sintaxis (por ejemplo, C2143, C2146, C2321), C2501 (desclasificación-especificadores que faltan), o C2433 (“inline” no permitida en la declaración de datos) mientras se compila el archivo de .TLI.

Debe determinar cuáles de los comentarios de la dependencia no proporciona de otra manera para los encabezados de sistema y proporcionar una directiva de #import en algún momento antes de la directiva de #import de la biblioteca de tipos dependiente para resolver los errores.

Para obtener más información, vea el artículo “infracción de acceso de la causa de mayo de los métodos del contenedor #import” (Q242527) o “#import de Knowledge Base de uso Al de los errores del compilador con XML” (Q269194).Encontrará artículos de Knowledge Base en MSDN Library multimedia o en https://support.microsoft.com/support/.

Atributos #import

#import puede incluir opcionalmente uno o varios atributos.Estos atributos indican al compilador que modifique el contenido de los encabezados de la biblioteca de tipos.Un símbolo de barra diagonal inversa (\) se puede utilizar para incluir líneas adicionales en una única instrucción de #import .Por ejemplo:

#import "test.lib" no_namespace \
   rename("OldName", "NewName")

Para obtener más información, vea Atributos #import (C++).

Específico de C++ de FINAL

Vea también

Referencia

Directivas de preprocesador

Compatibilidad con COM del compilador