使用COM从c++代码封送c#结构体
Using COM to marshal a C# struct from C++ code
前段时间,我有一个c#程序需要调用c++ dll中的一些函数。为此我使用了pInvoke。我需要传递的一些数据是结构体。因此,我将使用pInvoke签名工具包来了解如何创建一个c#结构体,该结构体与c++函数通过引用获取的结构体等效。然后,我就可以把这些结构体传递给c++代码了。
现在,我有一种相反的情况。我在c++代码中,我被交给了_com_ptr_t对象。这实际上是一个指向c#对象的指针。c#对象实现了一个带有get_Foo, set_Foo等属性的COM接口,我可以使用它从c#对象中提取值(通常,它们只是基本的数据类型,如float, bool, int等)并将它们填充到我的c++对应对象中。
这个工作得很好,但是有点慢。当我分析我的代码时,它在"clr"中花费了大量时间。因此,我希望找到一种更快的方法,在那里我可以添加一个函数到COM接口,将整个c#对象复制到c++对应的结构中——有点像我在上面用pInvoke做的那样,除了我通过COM接口从c++代码中提取数据,而不是通过pInvoke接口将数据传递给c++代码。
有人知道怎么做吗?
您可以使用IDL在COM中传递结构,这可能会加速数据传输,也可能不会。有一个很好的机会,它会提高数据复制的速度,因为你有更少的往返,但如果你花很多时间在CLR方面的原因是因为它做额外的工作,而不仅仅是复制数据,优化数据传输本身并不能真正加快事情。
在这种情况下,您必须对两边(本机和CLR)都有分析结果,因为您几乎肯定会优化错误的东西。
相关文章:
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 需要帮助理解这个基本的 Vector3D 结构的代码
- 如何获取结构体成员的地址
- 创建结构体向量,表达式:向量下标超出范围
- 如何在c++代码中使用C结构体
- 使用COM从c++代码封送c#结构体
- C/ c++混合源码:在C代码中获取sizeof(c++结构体)
- 访问非托管C代码中的结构体