将结构(或类)从 C++ dll 传递到 C# (Unity 3D)

2024-03-16

我正在编写一个包装器以从传感器获取一些数据。虽然我在传递 int、float 和它们的数组方面没有问题,但我很难掌握如何传递结构。

代码总结

C++ side

结构如下:

struct HandInfo
{
    int id;
    float x, y, z;
};

在某一时刻,一个静态的、全局可见的 HandInfo leftHand 填充了可通过以下包装函数检索的值:

extern EXPORT_API HandInfo MyWrapper_getLeftHand()
{
    return handtracker.getLeftHand();
}

where 手部追踪器只是包装类的一个实例。

C# side

一旦声明了 extern 函数

[DllImport("MyWrapper")]
private static extern HandInfo MyWrapper_getLeftHand();

在 C# 方面,理想情况下,我将具有相同的结构类型

public struct HandInfo
{
    public int id;
    public float x, y, z;
}

并分配一个变量

HandInfo hi = MyWrapper_getLeftHand(); // NAIVELY WRONG CODE

可以理解的是,这是行不通的。

有什么方法可以达到这个目的呢?

我将不胜感激任何帮助。 感谢大家抽出宝贵的时间。


它应该可以正常工作(至少,在我拥有的一个小型 C++ + C# 项目中,我能够使其与该项目一起工作)struct,x86 和 x64 中)

[DllImport("MyWrapper.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern HandInfo MyWrapper_getLeftHand();

唯一的事情是,你必须声明CallingConvention = CallingConvention.Cdecl.

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

将结构(或类)从 C++ dll 传递到 C# (Unity 3D) 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi

随机推荐

  • 如何正确启用/禁用Flutter的Button

    经研究 当 onPressed 为 null 时 Flutter 的 Button 会自动禁用 然而 由于我必要的测试功能 我被迫放置一个箭头函数 gt 它似乎不会触发 onPressed 实际上为 null 而是返回 null 作为值 因
  • ANR(强制关闭/等待),同时生成足够大的列表

    我正在创建一种文件资源管理器 其中如果将任何应用程序文件复制到手机 SD 卡 我将在带有对话框主题的活动中向用户显示它 对于复制的每个新 app apk 我都会将应用程序的名称和位置附加到对话框中 并且列表是可滚动的 我的问题是 如果我一次
  • 使用 Fast API 接收图像,使用 cv2 处理然后返回

    我正在尝试构建一个 API 它接收图像并对其进行一些基本处理 然后使用 Open CV 和 Fast API 返回它的更新副本 到目前为止 我的接收器工作得很好 但是当我尝试对处理后的图像进行 Base64 编码并将其发送回时 我的移动前端
  • 类型错误:无法深度复制此模式对象

    试图理解我的 变量 类中的这个错误 我希望在我的 Variable 类中存储 sre SRE Pattern 我刚刚开始复制 Variable 类 并注意到它导致我的所有 Variable 类实例发生更改 我现在明白我需要深度复制此类 但现
  • CAPL 编程使用 Timer 作为延迟

    我一直在编写一个 CAPL 脚本 它会在一定的延迟后在每个通道 2 个 上发送消息 我想使用生成以下延迟设置定时器 and mtimer 正在运行功能 我可以使用 setTimer 函数 但我不知道如何使用mtimer 正在运行 代码如下所
  • PhoneGap / Android 自定义键盘

    我正在开发一个具有多个input type numer 元素 目前仅限安卓 内置数字键盘有两个问题 it s inconsistent different on different versions of Android it has un
  • 如何向 ASP.NET 中的元素添加多个类?

    我正在尝试以编程方式将第二个类添加到 td C 中的元素 我想要添加类的元素已经分配了一个类 如果我做类似的事情 myObject CssClass MyClass 它只是覆盖原来的类 我想我可以做类似的事情 myObject CssCla
  • 关于*管理*测试驱动和/或敏捷开发的最佳具体“操作手册”? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一本易于理解的书来呈现给我的老板 团队 背景资料 我们越来越多的工作会议让我的老板 团队思考
  • R Shiny - 条件面板中的条件面板

    我想知道是否可以在另一个条件面板中包含一个条件面板 例如 如果我有一个包含两个选项的下拉列表 1 和 2 选择 1 将显示一组选项 选择 2 将显示另一组选项 但是是否可以在这些条件面板中嵌套一个条件面板 以便我可以在选项 1 的输入中拥有
  • Javascript - 在单词中拖动字母(重新排列)

    我目前正在开发一款名为 词洗牌 http wordshuffle bplaced net 目前单词是德语 用于测试目的 如果你想玩的话 我的进步进展顺利 但我决定改变你玩游戏的方式 目前 您必须通过在文本字段中输入您的猜测来猜测该单词 所以
  • 错误:无法连接到系统 d-bus:未安装 d-bus

    我现在使用 Virtual Box 启动 VM 版本是 5 1 26 r117224 Qt5 6 2 但是当我尝试启动 VM 时 我看到以下错误消息 00 00 29 246866 VMMDev Guest Log 00 00 00 000
  • 实体框架和分片数据库

    我有一个 WCF 数据服务在实体框架代码优先 4 1 提供程序之上运行 该数据库相当大 一个关键表有 77 百万条记录 并且每月增长约 10 并且出现了相当大的性能问题 虽然对这么大的数据库进行分片是一件痛苦的事情 但这似乎是不可避免的 我
  • 用于多行注释的 Unix Flex 正则表达式

    我正在 Unix 上使用 Flex 制作词法分析器 如果您之前使用过它 您就会知道您主要只是为您为其编写词法分析器的任何语言的标记定义正则表达式 我被困在最后一部分 我需要正确的正则表达式来进行多行注释 以允许类似的事情 This is a
  • MATLAB:两个矩阵在一个索引上的逐元素乘法?

    我试图弄清楚是否有一种本地方法可以在 Matlab 中获得两个矩阵的某种元素乘积 我正在寻找的产品需要两个矩阵 A and B说 并返回那里的产品C 其元素由下式给出 C i j k A i j B j k 自然地 列数A假设与行数相同B
  • 为什么 ui.alert 可以工作,但 ui.prompt 不能与 onOpen() 一起使用?

    当我使用 onOpen 时 我可以创建一个弹出窗口 ui alert 但 ui prompt 不起作用 例如 function onOpen var ui SpreadsheetApp getUi get ui for alert ui a
  • 我是否有 gcc 优化错误或 C 代码问题?

    测试以下代码 include
  • 我可以通过编程方式创建 Google 帐户吗?

    有谁知道是否通过java中的google api 我可以以编程方式创建谷歌帐户 Yes ish 管理 SDK https developers google com admin sdk Directory API 允许您创建可与 Googl
  • 在nodejs中写入文件之前对数据流进行排序

    我有一个输入文件 可能包含最多 1M 条记录 每条记录如下所示 field 1 field 2 field3 n 我想读取这个输入文件并根据field3在将其写入另一个文件之前 这是我到目前为止所拥有的 var fs require fs
  • 如何将业务逻辑和电子邮件发送功能分开?

    我的 Java Web 应用程序有一个要求 需要在某些条件下发送电子邮件警报 为此 我使用了 javax mail api 并且发送电子邮件效果很好 但问题是程序执行要等到发送电子邮件的方法执行完毕为止 由于在各个点要发送数百封电子邮件 这
  • 将结构(或类)从 C++ dll 传递到 C# (Unity 3D)

    我正在编写一个包装器以从传感器获取一些数据 虽然我在传递 int float 和它们的数组方面没有问题 但我很难掌握如何传递结构 代码总结 C side 结构如下 struct HandInfo int id float x y z 在某一