我正在为USPS构建win32 dll的包装器。当指针作为参数传递时,我已经调用了工作,因为我可以在将值发送到函数之前分配并释放内存。问题是当数据作为char *传回返回值时。
以下是我正在使用的C dll中的调用:
const char* z4LLkGetKeySTD(void);
这是DLLImport调用的C#代码:
[DllImport("C:\\AMS\\zip4_w32.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall, EntryPoint = "z4SLNKGetVersionSTD",
ExactSpelling = false), ReliabilityContract(Consistency.WillNotCorruptState, Cer.None)]
private static extern IntPtr z4SLNKGetVersionSTD();
上述私人电话的面向公众的C#方法:
public static string z4SLNKGetVersion()
{
IntPtr versionPtr = IntPtr.Zero;
string version;
versionPtr = z4SLNKGetVersionSTD();
version = Marshal.PtrToStringAnsi(versionPtr);
versionPtr = IntPtr.Zero;
return version;
}
有时在调用z4SLNKGetVersionSTD()时代码失败。
我知道在C中返回指向字符串的指针并不是最好的主意,但是我无法访问dll的代码。