pınvokestackımbalance nasıl tamir ya da kapatabilir miyim?
Ben sadece vs2008 den vs2010 geçti. Aynı, şimdi C dll bir verim için her çağrı dışında bir çözüm 'pınvokestackımbalance' özel durum.
Bu durum, 2008 yılında harekete değil. Çağıran uygulama için C dll ve tam erişim var. Bu pınvoke ile herhangi bir sorun görünmüyor, ama bu sorun diğer sorunları hata ayıklama imkansız hale getiriyor; IDE sürekli bu şeyleri anlatmak için durduruluyor.
Örneğin, C# imza:
[DllImport("ImageOperations.dll")]
static extern void FasterFunction(
[MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage,
[MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage,
int inTotalSize, int inWindow, int inLevel);
Gibi C tarafında görünüyor:
#ifdef OPERATIONS_EXPORTS
#define OPERATIONS_API __declspec(dllexport)
#else
#define OPERATIONS_API __declspec(dllimport)
#endif
extern "C" {
OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray,
unsigned char* outRemappedImage,
int inTotalSize,
int inWindow, int inLevel);
}
Vs2010 ve bu özel durum oluşturuldu neden olur vs2008 arasında ne fark var? C # Direktif için farklı parametre eklemek gerekir?
CEVAP
İlk olarak, kod yanlış olduğunu anlamak (ve her zaman olmuştur). "Bir istisna başına değil, ama bir asistan yönetilen hata ayıklama." pınvokestackımbalance Kapalı VS2010 varsayılan olarak bu yüzden VS2008, ama bir sürü insan içinde varsayılan olarak açmak değil, oldu. MDA Serbest modunda çalışmaz, eğer serbest bırakmak için inşa tetikleyici olmayacaktır.
Sizin durumunuzda, çağırma kuralı yanlıştır. DllImport
86 masaüstü kodu CallingConvention.StdCall
aynı CallingConvention.WinApi
, varsayılan. CallingConvention.Cdecl
olmalıdır.
Nasıl sayfa üzerinde herhangi bir yerd...
Nasıl pencereyi kapatmadan bir tampon ...
Nasıl tamir "simüle metrik kullan...
HighCharts - Nasıl puan kapatabilir mi...
Nasıl bir yönlendirme sayfası jQuery k...