我正在尝试在我的c#应用程序中调用它
[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);
c中的签名是
void Decompress(char *dest, const char *src, int *dest_size, int *src_size, HuffmanObj *obj);
void DecompressClean(HuffmanObj *obj);
我不知道这是怎么回事。
谢谢
答案 0 :(得分:1)
您忘记了[DllImport]声明中的CallingConvention属性,在您的情况下它是Cdecl。默认值是StdCall,它确实会触发MDA警告。
HuffmanObj上的 ref 关键字看起来也是错误的,假设您将其声明为类而不是结构。尝试调试本机代码,以便查看传递的参数值并快速查看这样的问题。 Project + Properties,Debug选项卡,Enable unmanaged code debugging复选框。在本机函数体的第一行设置断点。