错误: Visual c + +.net 编译器生成两个不同的本机类型的相同的布尔返回类型

文章翻译 文章翻译
文章编号: 327097 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

Visual c + +.net 编译器将生成两个 NATIVE_TYPE_U1NATIVE_TYPE_VARIANTBOOL 相同的布尔值的返回类型使用 MarshalAs(UnmanagedType::VariantBool) 标记。

状态

Microsoft 已经确认这是在 Microsoft 中的错误在本文开头列出的产品。

更多信息

重现行为的步骤

  1. 在 Visual c + +.net,创建新的托管 c + + 应用程序名为 TestBoolean 的项目。
  2. 双击 TestBoolean.cpp 文件在解决方案资源管理器,然后将该文件中的将代码替换下面的代码:
    // 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. 请按 CTRL + SHIFT + B 可生成项目。
  4. 在命令提示符下键入以下内容:
    	c:\>ildasm.exe /adv
    						
    这在高级模式下启动 ildasm。
  5. 在 $ ildasm 中打开 TestBoolean.exe。

  6. 视图 菜单上单击 Metalnfo,然后单击 显示!

    检查生成的元数据。您将看到编译器发出的返回值的两种不同的本机类型。
    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 
    					

属性

文章编号: 327097 - 最后修改: 2005年9月27日 - 修订: 1.6
这篇文章中的信息适用于:
  • Microsoft Visual C++ .NET 2002 标准版
  • Microsoft Visual C++ .NET 2003 Standard Edition
关键字:?
kbmt kbhotfixserver kbqfe kbbug kbcominterop kbnofix KB327097 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 327097
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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