Erro: O compilador do Visual C++ .NET gera dois tipos diferentes de nativos para o mesmo tipo de retorno booleano

Traduções deste artigo Traduções deste artigo
ID do artigo: 327097 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

O compilador Visual C++ .NET gera ambos NATIVE_TYPE_U1 e NATIVE_TYPE_VARIANTBOOL para Boolean mesmo retornam o tipo é marcado com MarshalAs(UnmanagedType::VariantBool) .

Situação

A Microsoft confirmou que este é um bug no Microsoft produtos que estão listados no início deste artigo.

Mais Informações

Passos para reproduzir o problema

  1. No Visual C++. NET, crie um novo aplicativo de C++ gerenciado projeto é denominado TestBoolean .
  2. Clique duas vezes no arquivo TestBoolean.cpp no Solution Explorer e, em seguida, substitua o código desse arquivo com o código a seguir:
    // 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. Pressione CTRL + SHIFT + B para criar o projeto.
  4. No prompt de comando, digite o seguinte:
    	c:\>ildasm.exe /adv
    						
    este inicia ildasm no modo Avançado.
  5. Abra TestBoolean.exe no ildasm.

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

    Examine os metadados que é produzido. Você verá que o compilador emite dois tipos diferentes de nativos para o valor de retorno.
    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 
    					

Propriedades

ID do artigo: 327097 - Última revisão: terça-feira, 27 de setembro de 2005 - Revisão: 1.6
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Palavras-chave: 
kbmt kbhotfixserver kbqfe kbbug kbcominterop kbnofix KB327097 KbMtpt
Tradução automática
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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 327097

Submeter comentários

 

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