Error: Hacer referencia a bibliotecas de tipos diferentes puede representar un dependiente de la plataforma ejecutable

Seleccione idioma Seleccione idioma
Id. de artículo: 281913 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Después de compilar un proyecto de Visual Basic que hace referencia a more than una biblioteca de tipo en una plataforma (such as un equipo Microsoft_Windows_2000-based), el binario resultante se produce un error para ejecutarse en otras plataformas (como Microsoft Windows NT 4-, Microsoft Windows 95, Microsoft Windows 98: y equipos basados en Windows ME) y obtiene una infracción de acceso (AV).

Causa

El compilador de Visual Basic distingue mayúsculas de minúsculas cuando está leyendo las entradas de dllname en bibliotecas de tipos. Como resultado, si un proyecto hace referencia a dos o más bibliotecas de tipos y la entrada dllname para la misma DLL está escrita en casos diferentes de diferentes bibliotecas, tales como dllname("kernel32.dll") en una biblioteca y dllname("KERNEL32.DLL") en la biblioteca B, el compilador genera dos secciones de importación para la misma DLL y representa la plataforma binaria dependientes.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo.

Más información

Pasos para reproducir este comportamiento

  1. Configurar un equipo basado en Windows 2000 y un equipo basado en Windows NT 4, ambos con los service Pack más recientes. También instalar Visual Basic y Visual C++ 6.0 con Service Pack 5 en ambos equipos.
  2. En el equipo basado en Windows 2000, copiar y pegar el lenguaje de descripción de interfaz (IDL) siguiente código en el Bloc de notas y guárdelo como lcase.idl . Compílelo con MIDL.EXE, lcase.idl midl . La biblioteca de tipo resultante se denomina lcase.tlb .
    [
      uuid(D618AA4D-814A-47a2-9AC1-DDE18EDF1C54),
      version(1.0),
      helpstring("Lower case test")
    ]
    library lcasetest
    {
        [
          dllname("kernel32.dll"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - lcase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  3. Como en el paso 1, generar ucase.tlb con el siguiente código IDL:
    [
      uuid(3F215C63-D0AD-4980-93F2-5DDF850061E4),
      version(1.0),
      helpstring("Upper case test")
    ]
    library ucasetest
    {
        [
          dllname("KERNEL32.DLL"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - ucase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  4. Cree un proyecto EXE estándar en Visual Basic. Se creará Form1 de manera predeterminada.
  5. En el menú proyecto , haga clic para seleccionar referencias . En el cuadro de diálogo referencias , vaya a lcase.tlb y ucase.tlb , seleccione las dos bibliotecas y a continuación, haga clic en Aceptar .
  6. Agregue el código siguiente a Form1:
    Private Sub Form_Load()
        lcasetest.Sleep 1
        ucasetest.Sleep 1
    End Sub
    					
  7. En el menú archivo , haga clic en para Guardar el proyecto y a continuación, seleccione Crear Project1.exe para compilar el proyecto.
  8. Ejecute el ejecutable Proyecto1.exe y observe que el formulario aparece sin errores.
  9. Copiar Project1.exe en el equipo basado en Windows NT 4 y ejecútelo. Tenga en cuenta que se produce una infracción de acceso.
  10. Copiar y compilar el mismo proyecto en el equipo basado en Windows NT 4 y ejecutarlo en ambos los Windows NT 4 y Windows 2000 equipos basados en. Tenga en cuenta que se produce un error en el equipo basado en Windows 2000.

Propiedades

Id. de artículo: 281913 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Edición de aprendizaje
Palabras clave: 
kbnosurvey kbarchive kbmt kbbug kbcompiler kbnofix KB281913 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 281913

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com