gpt4 book ai didi

c# - c#中来自c++的unsigned char数组

转载 作者:行者123 更新时间:2023-11-28 04:55:14 25 4
gpt4 key购买 nike

我正在尝试在 C# 中调用 C++ dll 函数。该函数有一个结构作为参数,我对变量 aby_data[8] 有疑问。我将 unsigned char[] 定义为 byte[],程序没有崩溃,但我没有收到任何数据。

结构 C++

typedef struct st_canmsg
{
long l_id;
unsigned char by_len;
unsigned char by_msg_lost;
unsigned char by_extended;
unsigned char by_remote;
unsigned char aby_data[8];
unsigned long ul_tstamp;
} CMSG;

转换为 C#

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct CMSG
{
public Int32 l_id;
public byte by_len;
public byte by_msg_lost;
public byte by_extended;
public byte by_remote;
public byte aby_data[];
public UInt32 ul_tstamp;
};

CMSG t_CANMsg[] = new CMSG[1];
t_CANMsg[0].aby_data = new byte[8];
t_CANMsg[0].aby_data[0] = 01;
t_CANMsg[0].aby_data[1] = 02;
t_CANMsg[0].aby_data[2] = 03;
t_CANMsg[0].aby_data[3] = 04;
t_CANMsg[0].aby_data[4] = 05;
t_CANMsg[0].aby_data[5] = 06;
t_CANMsg[0].aby_data[6] = 07;
t_CANMsg[0].aby_data[7] = 08;

l_retval = canSend(handle, out t_CANMsg[0], out len);

最佳答案

您正在编码一个固定长度的数组,但您没有在结构定义中指定数组的大小。

你能尝试像这样更新你的结构定义吗:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct CMSG
{
public Int32 l_id;
public byte by_len;
public byte by_msg_lost;
public byte by_extended;
public byte by_remote;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte aby_data[];
public UInt32 ul_tstamp;
};

或者,您也可以尝试显式定义字节:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct CMSG
{
public Int32 l_id;
public byte by_len;
public byte by_msg_lost;
public byte by_extended;
public byte by_remote;
public byte aby_data_0;
public byte aby_data_1;
public byte aby_data_2;
public byte aby_data_3;
public byte aby_data_4;
public byte aby_data_5;
public byte aby_data_6;
public byte aby_data_7;
public UInt32 ul_tstamp;
};

如果您仍然有问题,您是否还共享canSend 的声明?

关于c# - c#中来自c++的unsigned char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com