Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#引用传递给C++;指针和指针_C#_Interop_Pinvoke_Marshalling_Dllimport - Fatal编程技术网

将C#引用传递给C++;指针和指针

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

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


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

< P>不能直接从有符号C代码传递任何变量到本机C++代码。解决方案是pinvoke,您可以在其中封送数据


这很好,但你应该知道,这不是每次fastes解决方案。每次调用时,都必须复制内存,并根据数据类型进行转换。

我解决类似问题的方法是使用Fortan编写一些旧代码。 我把这个代码转换成C,然后创建一个托管C++项目。 在C++中,我调用这个有缺陷的C++项目。 c代码如下所示:

不安全的
{
double*输入=(double*)utils.Memory.Alloc(sizeof(double)*n);
double*输出=(double*)utils.Memory.Alloc(sizeof(double)*n);
/调用C++代码 c_plus_plus.代码(输入、输出); //现在输出包含输出
//(您可以使用与输入和输出相同的数组
}


我希望这有帮助。

谢谢你的回答,我希望这是可能的。现在我要做更多的C++编程: