Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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/8/selenium/4.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
.net 固定对象是否也会固定对象中包含的引用?_.net_Pinvoke - Fatal编程技术网

.net 固定对象是否也会固定对象中包含的引用?

.net 固定对象是否也会固定对象中包含的引用?,.net,pinvoke,.net,Pinvoke,我有一个本机函数,它需要对C和C中的结构定义进行引用,如下所示: typedef struct _dataBlob { DWORD length; BYTE *data; } DataBlob [StructLayout(layoutKind.Sequential)] public struct DataBlob { public uint length; public byte[] data; } 我将通过ref将其传递给本机函数,它工作得很好。

我有一个本机函数,它需要对C和C中的结构定义进行引用,如下所示:

typedef struct _dataBlob 
{
    DWORD   length;
    BYTE    *data;
} DataBlob

[StructLayout(layoutKind.Sequential)]
public struct DataBlob
{
    public uint length;
    public byte[] data;
}

我将通过ref将其传递给本机函数,它工作得很好。根据我的理解,在调用之前为我固定结构,在调用返回时取消固定结构。我不确定的是,当它为我固定这个结构时,它是否也固定结构中引用的字节[]?我是否必须固定它以确保GC在呼叫期间不会移动它?是否需要设置一些属性以确保它被固定,或者在本机堆上为我创建副本?

并且它工作正常。好的,不要帮忙。marshaller负责固定。是的,它现在可以工作了,但我仍然不明白这是因为它固定了结构和其中的数组,还是因为我运气好,GC神决定在本机调用期间不进行收集。这只是一个简单的例子。想象一下,如果我有一个对象引用了另一个对象,而这个对象有自己的引用。所有这些东西都为我钉住了吗?我想我是想了解更多关于马歇尔的工作原理的信息。