Erro: O compilador do Visual C++ .NET gera dois tipos de nativas diferentes para o mesmo tipo de devolução boleano

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 327097
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
O compilador de Visual C++ .NET gera ambos NATIVE_TYPE_U1 e NATIVE_TYPE_VARIANTBOOL para o mesmo boleano devolvem o tipo está marcado com MarshalAs(UnmanagedType::VariantBool) .
Ponto Da Situação
A Microsoft confirmou que este é um erro no Microsoft produtos listados no início deste artigo.
Mais Informação

Passos para reproduzir o comportamento

  1. No Visual C++. NET, criar uma aplicação C++ gerida novo projecto com o nome TestBoolean .
  2. Faça duplo clique no ficheiro TestBoolean.cpp no Solution Explorer e, em seguida, substitua o código nesse ficheiro com o seguinte 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. Prima CTRL + SHIFT + B para criar o projecto.
  4. A partir de linha de comandos, escreva o seguinte:
    	c:\>ildasm.exe /adv						
    este é iniciado ildasm em modo de avançadas.
  5. Abra TestBoolean.exe no ildasm.

  6. No menu Ver , clique em Metalnfo e clique em Mostrar! .

    Examine os metadados é produzido. Verá que o compilador emite dois tipos diferentes nativos para o valor devolvido.
    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 					

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 327097 - Última Revisão: 01/17/2015 05:54:44 - Revisão: 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 KbMtpt
Comentários