4

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

关于如何做到这一点的任何想法?

4

2 回答 2

1

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

这工作正常,但你应该知道这不是每次都快速的解决方案。在每次调用时,都必须复制内存,并可能根据数据类型进行转换。

于 2012-12-20T18:31:47.997 回答
0

我对类似问题的解决方案,我在 Fortan 中有一些旧代码。我将此代码转换为 c,然后创建了一个托管 c++ 项目。在 c# 中,我将这个管理的 c++ 项目称为。

c# 代码如下所示:

unsafe
{
double* input = (double*)utils.Memory.Alloc(sizeof(double) * n);
双* 输出 = (double*)utils.Memory.Alloc(sizeof(double) * n);
//调用c++代码
c_plus_plus.code(input,output); //现在输出包含输出
//(您可以使用相同的数组作为输入和输出
}

我希望这有帮助。

于 2012-12-20T21:13:19.640 回答