SORU
17 AĞUSTOS 2010, Salı


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
17 AĞUSTOS 2010, Salı


İ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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • pilslajt

    pilslajt

    20 HAZİRAN 2008
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012