gpt4 book ai didi

c++ - 使用 COM 从 C++ 代码编码 C# 结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:24 24 4
gpt4 key购买 nike

前一段时间,我有一个 C# 程序需要调用 C++ dll 中的一些函数。为此,我使用了 pInvoke。我需要传递的一些数据是结构。因此,我将使用 pInvoke Signature Toolkit 来了解如何创建一个 C# 结构,该结构等效于 C++ 函数通过引用采用的结构。然后,我能够将这些结构传递给 C++ 代码。

现在,我的情况正好相反。我在 C++ 代码中,正在处理 _com_ptr_t 对象。这本质上是指向 C# 对象的指针。 C# 对象实现了一个具有 get_Foo、set_Foo 等属性的 COM 接口(interface),我可以使用它从 C# 对象中提取值(通常,它们只是基本数据类型,如 float、bool、int 等)并填充它们进入我的 C++ 对手。

这很好用,但有点慢。当我分析我的代码时,它在“clr”中花费了大量时间。所以,我希望找到一种更快的方法,我可以在其中向 COM 接口(interface)添加一个函数,该函数将立即将整个 C# 对象复制到 C++ 对应结构中——有点像我在上面使用 pInvoke 时所做的那样,除了我通过 COM 接口(interface)从 C++ 代码中提取数据,而不是通过 pInvoke 接口(interface)将数据传递给 C++ 代码。

有人知道这样做的方法吗?

最佳答案

你可以通过 structs在 COM 中使用 IDL,这可能会或可能不会加速数据传输。它很有可能会提高数据复制的速度,因为往返次数较少,但如果你在 CLR 方面花费大量时间的原因是因为它在做额外的工作复制数据、优化数据传输本身并不能真正加快速度。

这是您必须对双方( native 和 CLR)都具有分析结果的情况之一,因为否则您几乎肯定会优化错误的东西。

关于c++ - 使用 COM 从 C++ 代码编码 C# 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24128564/

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