gpt4 book ai didi

c# - 如何将结构从 C# 编码到 C++?

转载 作者:太空狗 更新时间:2023-10-29 23:04:52 26 4
gpt4 key购买 nike

我的任务是创建基于 C++ 结构(也包含内部结构)的编码 C# 结构。然后我应该将这个 c# 结构发送到 dllimport c++ 方法。

下面的基本 C++ 结构:

    
struct WProtims_Task_Table
{
Protims_DWN_OS_Task p_List_OS_Task[20];
Protims_CMD_CFSYS_Task p_List_CFSYS_Task[20];

int iTotalTaskNum;
} ;

struct WProtims_QueryDownloadTask_ACK
{
BYTE SystemDateTime[6];
BYTE TaskTableLen[4];
BYTE RespCode[1];
WProtims_Task_Table *p_Total_DWN_Tasks;
} ;

一个结构 (WProtims_QueryDownloadTask_ACK) 包含指向其他结构 (WProtims_Task_Table *) 数组的指针。我在下面创建了 C# 结构:


[StructLayout(LayoutKind.Sequential)]
class WProtims_Task_Table
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public Protims_DWN_OS_Task[] p_List_OS_Task = new Protims_DWN_OS_Task[20];
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public Protims_CMD_CFSYS_Task[] p_List_CFSYS_Task = new Protims_CMD_CFSYS_Task[20];

public int iTotalTaskNum;
} ;

[StructLayout(LayoutKind.Sequential)]
class WProtims_QueryDownloadTask_ACK
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] SystemDateTime;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] TaskTableLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
public byte[] RespCode;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public WProtims_Task_Table[] p_Total_DWN_Tasks = new WProtims_Task_Table[20];
} ;

当我将此结构发送到 c++ 方法时,我正确地获得了第一个字段(SystemDateTime、TaskTableLen、RespCode 的字节数组),但最后一个字段(指向 WProtims_Task_Table 数组的指针)包含垃圾。我找不到将数组数据正确编码到 C++ 结构的方法?

最佳答案

我强烈推荐 SWIG为了这。我经常使用它来将 C++ 对象引入 C#,它非常简单。

关于c# - 如何将结构从 C# 编码到 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21279147/

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