Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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/0/amazon-s3/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# 比较非托管代码中的2个托管对象地址_C#_Pointers_Unmanaged_Managed - Fatal编程技术网

C# 比较非托管代码中的2个托管对象地址

C# 比较非托管代码中的2个托管对象地址,c#,pointers,unmanaged,managed,C#,Pointers,Unmanaged,Managed,打破我的头脑来解决问题, 我需要比较非托管代码中的2个托管对象 i、 e 比较如果我已经访问了托管对象,则压缩是在非托管代码中进行的 我的第一个想法是传递内存地址,但在C#中获取对象地址没有成功 (也无法锁定对象) 我使用现有的C++代码,通过比较地址实现了比较。 下面是一些代码示例,以了解这一点: C#代码: ==================================================== c++代码: bool IsObjAccessed(UINT8* address

打破我的头脑来解决问题, 我需要比较非托管代码中的2个托管对象

i、 e 比较如果我已经访问了托管对象,则压缩是在非托管代码中进行的

我的第一个想法是传递内存地址,但在C#中获取对象地址没有成功 (也无法锁定对象)

我使用现有的C++代码,通过比较地址实现了比较。 下面是一些代码示例,以了解这一点:

C#代码:

====================================================

c++代码:

bool IsObjAccessed(UINT8* address) ;

void SaveAccessedObject(UINT8* address) ;

托管对象没有固定地址。垃圾收集器在压缩堆时移动它们。这种情况随时都可能发生,无法预测何时会触发集合。这里有Object.ReferenceEquals()来检查两个对象引用是否引用同一个对象。但在您试图实现的场景中,这不太可能有用。这是非常神秘的。不要“保存”对象.NET有很好的序列化支持,所以忘记C++,去简单的纯.NET解决方案。我想到的一个想法是把Obj.GethHAc码作为指针。使用<代码> GetHashCode <代码>是不可靠的。两个不同的对象可能有相同的哈希代码。我想,从对象的数据中构建某种密钥。或者将唯一的对象ID从C++代码传递给C++代码。有很多选项,但这将在很大程度上取决于对象、如何使用它们等等。您也可以只使用.NET序列化将对象序列化到内存流,然后将缓冲区传递给C++,将其存储为BLB。
bool IsObjAccessed(UINT8* address) ;

void SaveAccessedObject(UINT8* address) ;