错误: 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 					

警告:本文已自动翻译

属性

文章 ID:327097 - 上次审阅时间:01/17/2015 05:54:46 - 修订版本: 1.6

Microsoft Visual C++ .NET 2002 标准版, Microsoft Visual C++ .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcominterop kbnofix KB327097 KbMtzh
反馈