将 C++ 二维固定长度 char 数组编组为结构成员

2023-11-29

我正在尝试调用一个非托管 C++ 函数,该函数具有一个结构作为输入参数。 该结构在头文件中定义如下:

struct MyStruct
{
int     siOrder;
char     aaszNames[6][25];
int     siId[6];
int     siTones[6];        
};

我尝试将托管结构声明如下:

[StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct MyStruct {

public int siOrder;

[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst=150)]
public string aaszNames;

[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)]
public int[] siId;

[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)]
public int[] siTones;
}

但没有任何成功。我猜测封送处理会失败,因为 aaszNames 实际上是一个由 6 个 25 长空终止字符串组成的数组。 我尝试将 aaszNames 声明为

 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=150)]
 public char[] aaszNames;

必要时用空值填充数组。但是,再一次,什么也没有。

我有什么遗漏的吗?我究竟做错了什么?编组这个二维字符数组的最佳方法是什么?

任何提示,请。


尝试使用多个 C# 结构:

[StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct MyStruct_Name
{
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 25)]
    public string name;
}

[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct MyStruct
{
    public int siOrder;

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6)]
    public MyStruct_Name aaszNames;

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I4)]
    public int[] siId;

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I4)]
    public int[] siTones;
}

这就是我传递 C 风格字符串数组的方式。

不要忘记创建 aaszNames 的内容!编组器讨厌空引用。

MyStruct foo = new MyStruct();
for (int i = 0; i < 6; i++)
{
    foo.aaszNames[i] = new MyStruct_Name();
    foo.aaszNames[i].name = "";
}

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 C++ 二维固定长度 char 数组编组为结构成员 的相关文章

随机推荐

  • Javascript 查找链接的颜色

    所以我遇到的问题基本上已经解决了 我有一个 HTML 格式的外部网站列表 如下所示 a href http google com au http google com au a br a href http stackoverflow co
  • React-router-Dom:在 React 中重定向多个用户登录后的空白页面

    我的反应项目中有两个 用户和管理员 用户 我想在成功登录后将他们重定向到他们受尊重的页面 为了实现这一目标 我创建了一个名为的独立组件authenticatedRoute js并通过 AuthenticatedRoute 组件包装这些组件
  • PL/SQL 中的转义下划线

    我有一个与此类似的 oracle 触发器 AFTER INSERT OR UPDATE ON TABLE ABC FOR EACH ROW BEGIN IF new COLUMN A LIKE H THEN INSERT INTO TABL
  • 无法从 boost 子进程获取分段错误退出代码

    当子进程由于分段违规或除数为零或任何其他终止信号而被终止时 我试图获取子进程的退出代码 使用 boost process 和 boost asio 退出代码和错误代码始终返回 0 和成功 我在 CentOS 7 上使用 g 4 8 5 和
  • 将 hashmap 转换为 JSON 对象时从 Gson 获取 stackoverflowerror

    我想将树结构中的数据表示为 java 对象 然后我想将其转换为 JSON 对象 在 stackoverflow 条目的帮助下 将父 子关系的java arrayList转换为树 使用 GSON 将 hashmap 转换为 JSON 我有以下
  • 在 C 中为 Fortran 可分配内存分配内存

    我们试图在 C 中接管旧版 Fortran 代码 100 000 行代码 的内存分配 因为我们使用 C 库在集群上分区和分配分布式内存 可分配的变量在模块中定义 当我们调用使用这些模块的子例程时 索引似乎是错误的 移动了一位 然而 如果我们
  • Vue.js - 同一路线上的两个不同组件

    我试图弄清楚如何使用 Vue 在同一条路线上拥有 2 个不同的组件 主页或登录页面 取决于用户是否经过身份验证 也许我在文档中遗漏了一些东西 但我无法也无法弄清楚 有可能吗 Thx 在路由器映射中使用 auth 参数 router map
  • Azure 数据工厂 V2 检查复制活动的文件大小

    我需要对本地数据源中的文件运行复制活动 我需要检查文件大小 如果大小大于 0 则复制它们 如果文件大小为 0 我将发送通知 以便管理员检查源 问题是 在 获取元数据 活动中 字段列表中的参数不包括大小 此外 验证活动也不查找大小属性 有什么
  • Spyder 4 绘图窗格不显示

    使用 Spyder 4 它不再在控制台上方显示 绘图 窗格 我已确保后端设置为内联 但窗格仍然不显示 如果有人知道任何解决方案 将不胜感激 Spyder 维护者在这里 您需要进入菜单View gt Panes并激活与绘图窗格相对应的条目
  • java中如何比较两个日期?

    我正在尝试比较两个日期 我只想比较日期部分而不是时间部分 这就是我在程序中存储日期的方式 Thu Jan 27 23 20 00 GMT 2011 我有一个 ArrayList
  • g++ 关于声明多维双精度数组的警告

    在我的 C 程序中 我试图初始化一个全为 0 的 double 类型的 3 3 3 数组 在类头文件中 我声明了一个成员 double list 3 3 3 当我打印出这个数组的内容时 我发现并非所有条目都如我所料为0 例如list 1 1
  • Mkmapview 半页卷曲[重复]

    这个问题在这里已经有答案了 可能的重复 如何在iPhone中制作像地图应用程序一样的半卷曲动画 我需要在地图视图中实现半页卷曲 就像 Google 地图应用程序一样 我实施UIViewAnimationTransitionCurlUp UI
  • 如何获取phonegap中的当前位置?

    我在我的应用程序中添加了地理定位插件 并使用此代码来获取phonegap中的当前位置 但这段代码不起作用 document addEventListener deviceready onDeviceReady false function
  • 如何使用 Perl 正则表达式删除未使用的嵌套 HTML span 标记?

    我正在尝试从 HTML 文件中删除未使用的跨度 即那些没有属性的跨度 并且已经用其他正则表达式清理了我不需要的所有属性 我的正则表达式有问题 没有选择要删除的正确的开始和结束标签对 my a a span b span style colo
  • 在 if 语句中使用 stringstream >> 运算符

    以下代码片段旨在尝试使用 stringstream 对象从字符串中提取整数 并检测整数提取是否成功 stringstream 类继承 gt gt 运算符以返回对 istream 实例的引用 整数提取失败如何导致 myStream 等于 0
  • GoogleAppEngineLauncher:数据库磁盘映像格式错误

    我为 Google App Engine 编写了一个小型应用程序 每次我想运行我的应用程序时 都会出现以下错误 Running dev appserver with the following flags skip sdk update c
  • php-mysql版本与Mysql服务器冲突

    我安装了 php 5 3 和 mysql 服务器 5 5 我需要安装 php mysql 但出现以下冲突 我该如何解决这个问题 yum install php mysql Loaded plugins fastestmirror Loadi
  • 使用 NGINX proxy_pass 进行 https 域的 Webpack 开发服务器原因:net::ERR_CONNECTION_CLOSED

    我已经设置了一个服务器 它托管一个前端的 angular2 webpack starter 项目和一个nodejs后端 nginx 默认有两个 proxy pass 将连接映射到服务器上的正确位置 几乎一切都按预期进行 但是代理存在问题so
  • 使用 PyMongo 连接数组因未知组运算符“$concatArrays”而失败

    我有 mongodb 数据 例如 word good info tbl id d1 term freq 2 tbl id d2 term freq 56 tbl id d3 term freq 3 word spark info tbl i
  • 将 C++ 二维固定长度 char 数组编组为结构成员

    我正在尝试调用一个非托管 C 函数 该函数具有一个结构作为输入参数 该结构在头文件中定义如下 struct MyStruct int siOrder char aaszNames 6 25 int siId 6 int siTones 6