c# - 将 C# 引用传递给 C++ 指针并返回

标签 c# interop pinvoke marshalling dllimport

我想将 C# 引用传递给 C/C++ 代码(指针),而不是从指向 C# 引用的指针取回它。 我有很多对(uint,Object)。我在 C 代码中创建了排序机制,因为它比 C# 快得多。只需要 key(uint) 和 value(object reference)。 C 代码使用键进行排序,并没有改变值(指针)。有什么简单的方法吗?我需要使用编码吗? C 函数将被调用很多次(甚至可能是一百万次),所以我担心编码太慢了,我什至不知道如何编码。我相信当 GC 更改对象地址时,C# 引用的地址不会更改。因此不需要将对象放置在固定内存中。我说得对吗? 现在我可以使用 DllImport 调用 C 函数,我可以将 C# 引用存储到 C 指针,但我无法获取存储在 C 指针中的地址到 C# 引用。

关于如何做到这一点有什么想法吗?

最佳答案

无法将任何变量直接从托管 C# 代码传递到 native C++ 代码。解决方案是 pinvoke,您可以在其中编码数据。

这很好用,但您应该知道这并不是每次都可以解决禁食问题。在每次调用时,必须复制内存,并可能根据数据类型进行转换。

关于c# - 将 C# 引用传递给 C++ 指针并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13978300/

相关文章:

c# - 如何将 switch case 操作放入 C# 的循环中?

matlab - 如何将非常大的 MATLAB 稀疏矩阵保存到文本文件中?

f# - 平台调用 F# 回调函数

.net - 如何在注册表更改后刷新资源管理器

c# - Aspnetcore 2.2 针对 .Net Framework,InProcess 在 azure 应用程序服务上失败,并出现错误 TTP 错误 500.0 - ANCM 进程内处理程序加载失败

c# - Entity Framework 对现有数据的流畅 API

c# - 如何在转发器中使用复选框列表?

c# - 外部应用程序使用共享内存接收消息但没有包含数据

javascript - 我通过端口从 Elm 应用程序传递一个元组。 JavaScript 将接收什么类型的对象?

来自 byte[] 的 C# LoadLibrary