【问题标题】:Best practice of sending array from native code to managed code(C++/CLI)?将数组从本机代码发送到托管代码(C++/CLI)的最佳实践?
【发布时间】:2010-10-04 10:35:46
【问题描述】:

我正在编写一个用于读/写 USB HID 设备的 win32 dll。用于交换的数据是一个 64 字节的无符号字符数组。客户端程序是用 C++/CLI 编写的。

为了实现最大速度和最小开销,我需要一种将阵列发送到托管客户端的有效方法。

我现在能想到的有两种选择:

  1. Native:使用 PostMessage 并发送数组的指针。
    托管:在 WndProc 中,Marshal。将指针复制到一个新的托管 Byte 数组,然后删除该指针。

  2. Native:使用函数指针作为回调来处理数据。
    托管:使用 Marshal.GetFunctionPointerForDelegate 将函数指针传递给原生世界。

谢谢。

【问题讨论】:

  • C++/CLI 可以读取非托管数组,不需要封送处理。

标签: winapi c++-cli marshalling unmanaged managed-c++


【解决方案1】:

我会说选择奇怪的编组方式是过早的优化。使用最简单的方法来编组数据,如果效果不理想,请尝试评估其他方法。除非有任何架构需要回调或消息发布,为什么不直接将数组传递给函数?

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多