我不知道如何解决这个问题,而且在两个小时的大部分时间里,我一直在用头撞砖墙。我在具有以下文档的非托管 DLL 中有一个函数:
BOOL ZLNET_QueryDeviceTime(LONG lLoginID, LPZLNET_TIME pDeviceTime, int waittime=2000);
我假设pDeviceTime
是一个指针,因此我在我的 C# 代码中传递出来以用作参考。在我的 C# 项目中,我有以下声明:
[StructLayout(LayoutKind.Sequential)]
public struct ZLNET_TIME
{
public Int32 dwYear;
public Int32 dwMonth;
public Int32 dwDay;
public Int32 dwHour;
public Int32 dwMinute;
public Int32 dwSecond;
} ;
[DllImport("zlnetsdk.dll")]
unsafe public static extern bool ZLNET_QueryDeviceTime(long lLoginID, out ZLNET_TIME pDeviceTime, int waittime);
我调用我的函数:
ZLNET_TIME t = new ZLNET_TIME();
ZLNET_QueryDeviceTime(loginResult, out t, 2000);
但是,当我运行我的项目时,我得到了错误:
托管调试助手
PInvokeStackImbalance
在 (MY APP EXE) 中检测到问题。附加信息:对
PInvoke
函数的调用VP::ZLNET_QueryDeviceTime
使堆栈不平衡。这可能是因为托管PInvoke
签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。”
然后,我的ZLNET_TIME
变量中什么也没有得到。谁能帮我这个?