我用C#调用C++的动态库,需要把一个结构体传进去,
C++中的结构体是这样的,struct t_DevReturn
{
int iLogicCode; // 逻辑错误码
int iPhyCode; // 物理错误码;
int iHandle; // 处理方法:0-不处理 1-初始化 2-重发命令
int iType; // 错误类型:0-警告 1-严重
char acDevReturn[128]; // 硬件返回信息
char acReserve[128]; // 保留信息
};我在c#中定义同样的结构体
public struct t_DevReturn
{
public int iLogicCode; // 逻辑错误码
public int iPhyCode; // 物理错误码;
public int iHandle; // 处理方法:0-不处理 1-初始化 2-重发命令
public int iType; // 错误类型:0-警告 1-严重 [MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]
public string acDevReturn; // 硬件返回信息 [MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]
public string acReserve; // 硬件返回信息
};
可是程序调用DLL文件的时候就直接崩溃,是不是我定义的有问题,还是其他原因,等高手。
C++中的结构体是这样的,struct t_DevReturn
{
int iLogicCode; // 逻辑错误码
int iPhyCode; // 物理错误码;
int iHandle; // 处理方法:0-不处理 1-初始化 2-重发命令
int iType; // 错误类型:0-警告 1-严重
char acDevReturn[128]; // 硬件返回信息
char acReserve[128]; // 保留信息
};我在c#中定义同样的结构体
public struct t_DevReturn
{
public int iLogicCode; // 逻辑错误码
public int iPhyCode; // 物理错误码;
public int iHandle; // 处理方法:0-不处理 1-初始化 2-重发命令
public int iType; // 错误类型:0-警告 1-严重 [MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]
public string acDevReturn; // 硬件返回信息 [MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]
public string acReserve; // 硬件返回信息
};
可是程序调用DLL文件的时候就直接崩溃,是不是我定义的有问题,还是其他原因,等高手。
struct MyStruct
{
public int iLogicCode; // 逻辑错误码
public int iPhyCode; // 物理错误码;
public int iHandle; // 处理方法:0-不处理 1-初始化 2-重发命令
public int iType; // 错误类型:0-警告 1-严重 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string acDevReturn; // 硬件返回信息 [MarshalAs(UnmanagedType.LPStr, SizeConst = 128)]
public string acReserve; // 硬件返回信息
}
struct MyStruct
{
public int iLogicCode; // 逻辑错误码
public int iPhyCode; // 物理错误码;
public int iHandle; // 处理方法:0-不处理 1-初始化 2-重发命令
public int iType; // 错误类型:0-警告 1-严重 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string acDevReturn; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string acReserve;
}
"调用DLL文件的时候就直接崩溃",还有可能是你API定义有问题,你一起贴出来
如果这样不行的话,检查下dll是否有问题。