Error: Compilador de Visual C++ .NET genera dos tipos nativos diferentes para el mismo tipo de devolución Boolean

Seleccione idioma Seleccione idioma
Id. de artículo: 327097 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

El compilador de Visual C++ .NET genera ambos NATIVE_TYPE_U1 y NATIVE_TYPE_VARIANTBOOL para el mismo valor booleano devuelven el tipo que está marcado con MarshalAs(UnmanagedType::VariantBool) .

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 el comportamiento

  1. En Visual C++. NET, cree una nueva aplicación de C++ administradas proyecto que se denomina TestBoolean .
  2. Doble clic en el archivo TestBoolean.cpp en el Explorador de soluciones y, a continuación, reemplace el código en ese archivo con el siguiente código:
    // This is the main project file for the Visual C++ Application project that is 
    // generated by using an Application Wizard.
    
    #include "stdafx.h"
    
    #using <mscorlib.dll>
    #include <tchar.h>
    
    using namespace System;
    
    __gc class TestBoolean
    {
    public:
    	[returnvalue:System::Runtime::InteropServices::MarshalAs
    	(System::Runtime::InteropServices::UnmanagedType::VariantBool)]
    	bool RetValBoolean ([System::Runtime::InteropServices::MarshalAs
    	(System::Runtime::InteropServices::UnmanagedType::VariantBool)] bool b)
    	{
    		return b;
    	}
    };
    
    int _tmain(void)
    {
    	TestBoolean *test = new TestBoolean();
    	Console::WriteLine(test->RetValBoolean(true));
    	return 0;
    }
    						
  3. Presione CTRL + MAYÚS + B para generar el proyecto.
  4. Desde el símbolo del sistema, escriba lo siguiente:
    	c:\>ildasm.exe /adv
    						
    Esto inicia ildasm en el modo avanzado.
  5. Abra TestBoolean.exe en ildasm.

  6. En el menú Ver , haga clic en Metalnfo y haga clic en Mostrar! .

    Examinar los metadatos que se produce. Verá que el compilador emite dos tipos diferentes de nativos para el valor devuelto.
    Global fields
    -------------------------------------------------------
    
    Global MemberRefs
    -------------------------------------------------------
    
    TypeDef #1
    -------------------------------------------------------
    	TypDefName: TestBoolean  (02000002)
    	Flags     : [NotPublic] [AutoLayout] [Class] [AnsiClass]  (00000000)
    	Extends   : 01000008 [TypeRef] System.Object
    	Method #1 
    	-------------------------------------------------------
    		MethodName: RetValBoolean (06000003)
    		Flags     : [Public] [ReuseSlot]  (00000006)
    		RVA       : 0x00001000
    		ImplFlags : [IL] [Managed]  (00000000)
    		CallCnvntn: [DEFAULT]
    		hasThis 
    		ReturnType: Boolean
    		1 Arguments
    			Argument #1:  Boolean
    		3 Parameters
    			(0) ParamToken : (08000001) Name :  flags: [HasFieldMarshal]  (00002000)
    				NATIVE_TYPE_U1 
    			(0) ParamToken : (08000002) Name :  flags: [HasFieldMarshal]  (00002000)
    				NATIVE_TYPE_VARIANTBOOL 
    			(1) ParamToken : (08000003) Name : b flags: [HasFieldMarshal]  (00002000)
    				NATIVE_TYPE_VARIANTBOOL 
    					

Propiedades

Id. de artículo: 327097 - Última revisión: martes, 27 de septiembre de 2005 - Versión: 1.6
La información de este artículo se refiere a:
  • Microsoft Visual C++ .NET 2002 Standard
  • Microsoft Visual C++ .NET 2003 Standard
Palabras clave: 
kbmt kbhotfixserver kbqfe kbbug kbcominterop kbnofix KB327097 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): 327097

Enviar comentarios

 

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