2011-05-06 75 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