pInvokeStackImbalance MDA

pInvokeStackImbalanceتنشيط مساعد تصحيح الأخطاء التي تتم إدارتها (MDA) عند اكتشاف CLR الذي عمق مكدس بعد استدعاء النظام الأساسي المكالمة غير متطابق مع عمق بنية تخزين العناصر المتوقعة، بإعطاء اصطلاح استدعاء المحدد في DllImportAttributeالسمة بالإضافة إلى تعريف المعلمات في التوقيع التي تمت إدارتها.

ملاحظةملاحظة

The pInvokeStackImbalance MDA هو implemented فقط for 32-بت x86 الأنظمة الأساسية.

ملاحظةملاحظة

في the .NET الإصدار إطار العمل 3.5, the pInvokeStackImbalance MDA هو معطّل بواسطة الافتراضي. When you استخدم the .NET الإصدار إطار العمل 3.5 مع ‏‫‏‫Visual Studio 2005, the pInvokeStackImbalance MDA will appear في the مدارة تصحيح الأخطاء Assistants list في the استثناءات حوار صندوق (which هو displayed when you انقر استثناءات تشغيل the يصحح قائمة).However, selecting أو clearing the تم طرح فحص صندوق for pInvokeStackImbalance does not تمكين أو يعطل the MDA; it فقط عناصر التحكم whether ‏‫Visual Studio throws an ‏‏ استثناء when the MDA هو activated.

الأعراض

واجه أحد تطبيقات الوصول إلى انتهاك أو الذاكرة تلف عند إجراء أو اتباع استدعاء النظام الأساسي المكالمة.

السبب

The مدارة توقيع of the النظام الأساسي invoke يتصل might not مطابقة the unmanaged توقيع of the أسلوب being called. This mismatch can be caused بواسطة the مدارة توقيع not declaring the correct رقم of معلمات أو not specifying the appropriate الحجم for the معلمات. يمكن أيضا تنشيط MDA سبب اصطلاح استدعاء، من الممكن تحديد بواسطة DllImportAttributeالسمة، لا يطابق مدار اصطلاح الاستدعاء.

الدقة

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

التأثير تشغيل وقت التشغيل

يفرض استدعاء النظام الأساسي لكافة المكالمات إلى تدوين مسار nonoptimized في CLR.

الإخراج

يعطي الرسالة MDA الاسم استدعاء النظام الأساسي استدعاء الأسلوب الذي يسبب imbalance في بنية تخزين العناصر. نموذج رسالة استدعاء النظام الأساسي الاتصال تشغيل أسلوب SampleMethodهو:

A call to PInvoke function 'SampleMethod' has unbalanced the stack. 
This is likely because the managed PInvoke signature does not match 
the unmanaged target signature. Check that the calling convention and 
parameters of the PInvoke signature match the target unmanaged signature.

التكوين

<mdaConfig>
  <assistants>
    <pInvokeStackImbalance />
  </assistants>
</mdaConfig>

راجع أيضًا:

المرجع

MarshalAsAttribute

المبادئ

تشخيص الأخطاء مع المساعدين التصحيح مدارة

تنظيم إمكانية التشغيل المتداخل

موارد أخرى

إمكانية التشغيل المتداخل