小编Mat*_*ams的帖子

使用hdf5.net读取和编写引用类型

我正在使用HDF5DotNet编写通用数据记录API .我们的想法是使用反射来自动创建包含字段的H5复合数据类型.然后,用户可以使用方法轻松地将数据添加到数据日志中.DataLog<T>Twrite(T[] data)

为了自动创建H5类型,必须用[StructLayoutAttribute]一些字段或一些字段来装饰类或结构[MarshalAsAttribute].然后将每个字段映射到H5类型并添加到H5复合数据类型.包含枚举或其他用户定义的结构的类型有点复杂,但它们仍然有效.

从我在网上找到的例子中,我成功地创建了H5 Type,创建了一个数据集并为struct我创建的简单数据添加了一些数据.

当我从一个类型更改时我的问题structclass.仍然创建了H5Type并且没有抛出异常,但是当我在HDF View中打开文件时,我可以看到正确的字段,但数据是垃圾.

我怀疑问题出现是因为在C#结构中是值类型而类是引用类型.我使用以下代码来确定数据的基础结构是什么样的:

public static byte[] GetBytes(dynamic obj)
{
    var size = Marshal.SizeOf(obj);
    // Both managed and unmanaged buffers required.
    var bytes = new byte[size];
    var ptr = Marshal.AllocHGlobal(size);
    // Copy object byte-to-byte to unmanaged memory.
    Marshal.StructureToPtr(obj, ptr, false);
    // Copy data from unmanaged memory to managed buffer.
    Marshal.Copy(ptr, bytes, 0, size);
    // Release unmanaged memory. …
Run Code Online (Sandbox Code Playgroud)

c# hdf5

9
推荐指数
0
解决办法
843
查看次数

在什么情况下SynchronizedCollection <T> .Remove()会返回false?

SynchronizedCollection<T>.Remove()(https://msdn.microsoft.com/en-us/library/ms619895(v=vs.110).aspx)的MSDN文档声明此函数返回

如果项目已从集合中成功删除,则为true; 否则,错误.

除了项目不在列表中之外,在其他情况下这将返回错误吗?

例如,如果集合被锁定,它会返回false还是等到它被解锁以删除该项目?

c# multithreading

7
推荐指数
1
解决办法
633
查看次数

标签 统计

c# ×2

hdf5 ×1

multithreading ×1