A call to PInvoke function 'cCardControl::getPos' 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. 我的某段程式會噴出上面的Error,當然簡單的可以直接停用MDA,但現在會有不確定的藍白跑出來Orz C 的 prototype 為 typedef int (*GET_POS_FUNC)(long *top, long *left, long *bottom, long *right, long *width, long *height); 我的C# 寫法為 [DllImport(@"xxx.dll", EntryPoint = "getPipPos")] public static extern int getPos(out int Top, out int Left, out int Bottom, out int Right, out int Width, out int Height); 這裡要注意的是 C 在 32 bit 的 long 為 4 byte,所以C#要改用 int,C#的long是 8 byte 的,如果不確定就在 C 那邊使用 sizeof(long) 看一下。 我的程式會出現 unbalanced the stack 的錯誤。可是我另外一個簡單的小程式卻都沒有出現,後來發現是 .Net Framework 版本的問題,小程式是 .Net 2,我的程式是 .Net 4。於是開始搜尋,找到了下面的網頁。 http://msdn.microsoft.com/en-us/library/0htdy0k3.aspx 如果我英文沒看錯的話,他是說.Net 4 才會預設啟用這個 MDA,在 3.5 以下並不...