Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Memperbaiki Pengecualian PinvokeStackImbalance dalam VS2010?
Betulkan Pengecualian PinvokeStackImbalance dalam VS2010
Pengecualian PinvokeStackImbalance, sebelum ini dilumpuhkan secara lalai dalam VS2008, telah didayakan secara lalai dalam VS2010 Pengecualian ini bertujuan untuk memaklumkan pembangun tentang konvensyen panggilan yang salah dalam panggilan DllImport.
Definisi Masalah
Apabila memindahkan penyelesaian daripada VS2008 ke VS2010, DllImport memanggil ke C DLL membuang pengecualian PinvokeStackImbalance secara konsisten, walaupun DLL itu sendiri tidak berubah.
Resolusi
Isu ini berpunca daripada konvensyen panggilan yang salah digunakan dalam pengisytiharan DllImport. Secara lalai, DllImport menggunakan CallingConvention.WinApi, yang bersamaan dengan CallingConvention.StdCall untuk kod desktop x86. Walau bagaimanapun, fungsi C yang mendasari diisytiharkan sebagai __cdecl, yang memerlukan CallingConvention.Cdecl.
Betulkan
Ubah suai perisytiharan DllImport untuk menyatakan secara eksplisit konvensyen panggilan yang betul:
<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage, int inTotalSize, int inWindow, int inLevel);</code>
Nota Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Memperbaiki Pengecualian PinvokeStackImbalance dalam VS2010?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!