将c#引用传递给c++指针并返回
本文关键字:c++ 指针 返回 引用 | 更新日期: 2023-09-27 17:49:17
我想传递c#引用到C/c++代码(指针),然后从指针到c#引用得到它。我有很多对(int,Object)。我用C代码创建了排序机制,因为它比c#快得多。只需要键(int)和值(对象引用)。C代码使用key进行排序,并且不改变值(指针)。有什么简单的方法吗?我需要使用编组吗?C函数将被调用很多次(甚至可能是一百万次),所以我担心它将与编组太慢,我甚至不知道如何使用编组。我相信当对象地址被GC改变时,c#引用的地址不会改变。因此,不需要将对象放在压缩内存中。我说的对吗?现在我可以使用DllImport调用C函数,我可以将c#引用存储到C指针,但我不能将地址存储在C指针中以获取c#引用。
有什么好主意吗?
不可能将任何变量直接从托管c#代码传递到本机c++代码。解决方案是可以封送数据的pinvoke。
这工作得很好,但你应该知道这不是每次都是最快的解决方案。在每次调用时,必须复制内存,并可能根据数据类型进行转换。
我对类似问题的解决方案是,我在Fortan中有一些旧代码。我将此代码转换为c,然后创建一个托管c++项目。在c#中,我称之为托管c++项目。
c#代码是这样的:
不安全{
//调用c++代码
c_plus_plus.code(输入、输出);//现在输出包含输出
//(你可以使用相同的数组作为输入和输出
}