Chyba: Visual C++ .NET Kompilátor generuje dvě jiné typy nativní pro stejné typu Boolean vratky

Překlady článku Překlady článku
ID článku: 327097 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Kompilátor Visual C++ .NET generuje obě NATIVE_TYPE_U1 a NATIVE_TYPE_VARIANTBOOL pro stejné logická hodnota vrátí typ, který je označen atributem MarshalAs(UnmanagedType::VariantBool).

Prohlášení

Microsoft potvrzuje, že se to chybu v Microsoft produktech, které jsou uvedeny na začátku tohoto článku.

Další informace

Kroky pro reprodukci tohoto chování

  1. V aplikaci Visual C++ .NET, vytvořte novou Managed C++ aplikaci projekt, který se nazývá TestBoolean.
  2. Poklepejte na soubor TestBoolean.cpp v aplikaci Solution Explorer a pak nahraďte kód v tomto souboru s následujícím kódem:
    // 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. Stiskněte klávesy CTRL + SHIFT + B pro vytvoření projektu.
  4. Z příkazového řádku zadejte následující:
    	c:\>ildasm.exe /adv
    						
    ildasm to spustí v rozšířeném režimu.
  5. Otevřete TestBoolean.exe v ildasm.

  6. V nabídce Zobrazit klepněte na tlačítko Metalnfo a klepněte na tlačítko Zobrazit!.

    Prozkoumejte metadat, který je vytvářen. Zjistíte, že kompilátor vyzařuje dva různé typy nativní pro vrácenou hodnotu.
    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 
    					

Vlastnosti

ID článku: 327097 - Poslední aktualizace: 27. září 2005 - Revize: 1.6
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Klíčová slova: 
kbmt kbhotfixserver kbqfe kbbug kbcominterop kbnofix KB327097 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:327097

Dejte nám zpětnou vazbu

 

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