BUG: المحول البرمجي .NET Visual C++ بإنشاء أنواع الأصلي مختلفة الثاني نفس نوع إرجاع قيمة منطقية

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

327097
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الأعراض
ينشئ برنامج التحويل البرمجي Visual C++ .NET كليهما ترجع NATIVE_TYPE_U1 و NATIVE_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. افتح TestBoolean.exe في ildasm.

  6. من القائمة عرض، انقر فوق Metalnfo ثم انقر فوق إظهار!.

    فحص بيانات التعريف التي يتم تقديمه. يمكنك مشاهدة أن المحول البرمجي emits نوعين من أنواع الأصلي مختلفة عن قيمة الإرجاع.
    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 					

Warning: This article has been translated automatically

خصائص

رقم الموضوع: 327097 - آخر مراجعة: 01/17/2015 05:54:38 - المراجعة: 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 KbMtar
تعليقات