通过DllImport调用代码时出现AccessViolationException

时间:2016-04-29 18:42:44

标签: c# c dllimport

我正在为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的代码。

0 个答案:

没有答案