结构有默认构造函数,就像我一样
type tagONEDEV_FlowRec =
struct
.......
end
我可以做
new DeviceModel.tagONEDEV_FlowRec()
但它不适用于此:let (<++|) device bytes size =
let unmanagedPtr = Marshal.AllocHGlobal(size : int)
Marshal.Copy( (bytes : byte array), 0, unmanagedPtr, size)
Marshal.PtrToStructure(unmanagedPtr, (device : obj)) // Here
Marshal.FreeHGlobal(unmanagedPtr)
我也需要一个记录课
[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type tagONEDEV_FlowRec = {
mutable ....;}
或者
type tagONEDEV_FlowRec =
class
.......
end
但是这里没有默认构造函数,并且结构非常大到零手动初始化它们,那么我如何将这些类与默认构造函数一起使用?
如果我找不到解决方案,我认为在 C# 甚至 VB.NET 上重新编码这部分对我来说会更快。听起来像拐杖解决方案,但看起来我还不能用 F# OOP 部分拨号。
另外:我不想输入的是:
{TimeRec = 0;
Num = 0us;
FlagErr = 0us;
C6 = 0.0;
C2H6 = 0.0;
C3H8 = 0.0;
CH4 = 0.0;
CO2 = 0.0;
iC4H10 = 0.0;
iC5H12 = 0.0;
neoC5H12 = 0.0;
N2 = 0.0;
nC5H12 = 0.0;
O2 = 0.0;
nC4H10 = 0.0;
He = 0.0;
H2 = 0.0;
H2O = 0.0;
id = 0us; }
<-默认情况下,这就是我想要的,因为我有很多更大的结构,然后编写这样的构造函数是邪恶的。
最佳答案
好像我找到了一个工作技巧:
[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type tagONEDEV_FlowRec =
class
[<DefaultValue>] val RecTime : int;
[<DefaultValue>] val FlowTime : int;
[<DefaultValue>] val AbsPress : single;
[<DefaultValue>] val T : single;
[<DefaultValue>] val DP_V_FlowRate : single;
[<DefaultValue>] val Volume : double;
[<DefaultValue>] val Energy : double;
[<DefaultValue>] val id : UInt16;
new() = {}
end
关于class - 如何使用默认构造函数创建记录类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721902/