急求前辈指点,c#调用c/c++DLL,错误:对 PInvoke 函数调用导致堆栈不对称
急!求前辈指点,c#调用c/c++DLL,异常:对 PInvoke 函数调用导致堆栈不对称
这个是头文件里面的内容
function NET_SDK_Login(const sDevIP: PWideChar; wPort, wMediaPort: Word;
const sUsername, sPassword: PWideChar; pDeviceInfo: PNET_SDK_DeviceInfo): Integer;
这个是接口提供方,给我的数据类型
下面是我写的调用的代码
//============================用户注册===================================
/// <summary>
/// 用户登录(注册)设备 宽字节版
/// </summary>
/// <param name="sDevIP">设备IP地址</param>
/// <param name="wPort">登录端口</param>
/// <param name="wMediaPort">媒体传输端口</param>
/// <param name="sUsername">用户名</param>
/// <param name="sPassword">密码</param>
/// <param name="pDeviceInfo">设备信息</param>
/// <returns>-1 失败,其他返回登录ID,ID具有唯一性。其他的操作需要传入此ID</returns>
IRLABNETSDK_API LONG __stdcall NET_SDK_Login(const WCHAR* sDevIP, WORD wPort, WORD wMediaPort,
const WCHAR* sUsername, const WCHAR* sPassword, LPNET_SDK_DeviceInfo lpDeviceInfo);
// NET_SDK_Login参数结构
typedef struct{
char szSerialNo[SERIALNO_LEN]; // 序列号
BYTE byAlarmInPortNum; // 报警输入个数
BYTE byAlarmOutPortNum; // 报警输出个数
BYTE byDiskNum; // 硬盘数
BYTE byDevType; // 设备类型
BYTE byChanNum; // 通道数量
BYTE byStartChan; // 通道起始号
BYTE byAudioChanNum; // 语音通道数
}NET_SDK_DeviceInfo, *LPNET_SDK_DeviceInfo;
这个是头文件里面的内容
function NET_SDK_Login(const sDevIP: PWideChar; wPort, wMediaPort: Word;
const sUsername, sPassword: PWideChar; pDeviceInfo: PNET_SDK_DeviceInfo): Integer;
这个是接口提供方,给我的数据类型
下面是我写的调用的代码
public class DllToll
{
// NET_SDK_Login参数结构
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
public struct LPNET_SDK_DeviceInfo
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]
public byte[] szSerialNo; // 序列号
public byte byAlarmInPortNum; // 报警输入个数
public byte byAlarmOutPortNum; // 报警输出个数
public byte byDiskNum; // 硬盘数
public byte byDevType; // 设备类型
public byte byChanNum; // 通道数量
public byte byStartChan; // 通道起始号
public byte byAudioChanNum; // 语音通道数
};
/// <summary>
/// 初始化sdk
/// </summary>
[DllImport("IRLABNetSdk.dll",CallingConvention =CallingConvention.StdCall)]
public static extern bool NET_SDK_Init();
/// <summary>