鉴于此 C API 声明,它将如何导入到 C#?

const char* _stdcall z4LLkGetKeySTD(void);

我已经能够做到这一点:
   [DllImport("zip4_w32.dll",
       CallingConvention = CallingConvention.StdCall,
       EntryPoint = "z4LLkGetKeySTD",
       ExactSpelling = false)]
   private extern static const char* z4LLkGetKeySTD();

最佳答案

试试这个

   [DllImport("zip4_w32.dll",
       CallingConvention = CallingConvention.StdCall,
       EntryPoint = "z4LLkGetKeySTD",
       ExactSpelling = false)]
   private extern static IntPtr z4LLkGetKeySTD();

然后,您可以使用 Marshal.PtrToStringAnsi() 将结果转换为字符串。您仍然需要使用适当的 Marshal.Free* 方法为 IntPtr 释放内存。

10-06 03:37