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

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.

327097
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
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 					

Upozornění: Tento článek byl přeložen automaticky

Vlastnosti

ID článku: 327097 - Poslední kontrola: 01/17/2015 05:54:39 - Revize: 1.6

  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcominterop kbnofix KB327097 KbMtcs
Váš názor