BOGUE : Visual C++ .NET compilateur génère deux différents types natives pour le même type de retour Boolean

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 327097
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Symptômes
Le compilateur Visual C++ .NET génère deux NATIVE_TYPE_U1 et NATIVE_TYPE_VARIANTBOOL pour la même valeur booléenne renvoient type qui est marqué avec MarshalAs(UnmanagedType::VariantBool) .
Statut
Microsoft a confirmé le que de ce bogue dans le Microsoft produits répertoriés au début de cet article.
Plus d'informations

Procédure pour reproduire le comportement

  1. Dans Visual C++ .NET, créez une application de C++ géré projet est nommé TestBoolean .
  2. Double-cliquez sur le fichier TestBoolean.cpp dans l'Explorateur de solutions et de remplacer le code dans ce fichier avec le code suivant :
    // 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. Appuyez sur CTRL + MAJ + B pour générer le projet.
  4. À partir l'invite de commande, tapez suivantes :
    	c:\>ildasm.exe /adv						
    il démarre ildasm en le mode avancé.
  5. Ouvrez TestBoolean.exe dans ildasm.

  6. Dans le menu Affichage , cliquez sur Metalnfo , puis sur Afficher! .

    Examinez les métadonnées qui sont produite. Vous voyez que le compilateur émet deux différents types natives la valeur de retour.
    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 					

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 327097 - Dernière mise à jour : 01/17/2015 05:54:41 - Révision : 1.6

Microsoft Visual C++ .NET 2002 Initiation, Microsoft Visual C++ .NET 2003 Initiation

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcominterop kbnofix KB327097 KbMtfr
Commentaires