2011-05-06 77 views
2

我試圖用C來調用這個在我的C#應用​​程序pInvokeStackImbalance MDA警告如何解決它

[DllImport("UOEncryption.dll")] 
    public static extern void Decompress([In, Out] byte[] dest, byte[] src, out int dest_size, ref int src_size, ref HuffmanObj obj); 

    [DllImport("UOEncryption.dll")] 
    public static extern void DecompressClean(ref HuffmanObj obj); 

的簽名

void Decompress(char *dest, const char *src, int *dest_size, int *src_size, HuffmanObj *obj); 
    void DecompressClean(HuffmanObj *obj); 

我不知道它是如何的錯。

謝謝

+0

通過指定CallingConventions,問題解決:) 非常感謝你 體育。 HuffmanObj是一個結構體。 – Shadow649 2011-05-06 13:38:51

回答

1

你忘了在函數[DllImport]申報CallingConvention屬性,它是CDECL你的情況。默認是StdCall,它確實會觸發MDA警告。

ref關於HuffmanObj的關鍵字看起來也是錯誤的,假設您將它聲明爲類而不是結構體。請嘗試調試本機代碼,以便查看傳入的參數值並快速查看這樣的問題。項目+屬性,調試選項卡,啓用非託管代碼調試複選框。在本機函數體的第一行設置一個斷點。

+0

通過指定CallingConventions,問題解決:) 非常感謝你 體育。 HuffmanObj是一個結構體。 – Shadow649 2011-05-06 13:35:20