Tag: struct

这些C ++结构的C#等价物是什么

typedef union _Value { signed char c; unsigned char b; signed short s; unsigned short w; signed long l; unsigned long u; float f; double *d; char *p; } Value; typedef struct _Field { WORD nFieldId; BYTE bValueType; Value Value; } Field; typedef struct _Packet { WORD nMessageType; WORD nSecurityType; BYTE bExchangeId; BYTE bMarketCenter; int […]

“无效的托管/非托管类型组合”是什么意思?

我有以下结构: [StructLayout(LayoutKind.Auto,Pack=0)] private unsafe struct BIRDSYSTEMCONFIG { public byte bySystemStatus; public byte byError; public byte byNumDevices; public byte byNumServers; public byte byXmtrNum; public ushort wXtalSpeed; public double dMeasurementRate; public byte byChassisNum; public byte byNumChassisDevices; public byte byFirstDeviceNum; public ushort wSoftwareRev; public fixed byte byFlockStatus[127]; } 基于C ++结构: typedef struct tagBIRDSYSTEMCONFIG { BYTE bySystemStatus; // current […]

Marshal包含可变长度数组的C结构

我想将一个带有可变长度数组的C结构编组回C#,但到目前为止,我无法获得比指向结构表示和浮点指针更好的结果。 未管理的代表: typedef float smpl_t; typedef struct { uint_t length; /**< length of buffer */ smpl_t *data; /**< data vector of length ::fvec_t.length */ } fvec_t; 管理代表: [StructLayout(LayoutKind.Sequential)] public unsafe struct fvec_t1 { public uint length; public float* data; } [DllImport(“libaubio-4.dll”, EntryPoint = “new_fvec”, PreserveSig = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static […]

结构上的扩展方法

你能为结构添加扩展方法吗?

在c#中编组c结构

我有一个’C”DLL’可以将结构作为输入,我必须从我的c#程序中调用该DLL 以下是我在c中的示例结构,我必须在我的c#代码中编组这些结构 我在做对还是错? 实际C结构: typedef struct procedure { char code[8]; }procedure; typedef struct datefield { char date[10]; }datefield; typedef struct p45_clsgs { procedure p45_clsg; datefield p45_clsgdte; }p45_clsgs; C#: [StructLayout(LayoutKind.Sequential), Serializable] struct procedure { //char code[]; [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 8)] public string code; } [StructLayout(LayoutKind.Sequential), Serializable] struct datefield { //char date[10]; [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 10)] public […]

如何在C#中初始化结构

我有一些代码来初始化C#中的结构: namespace Practice { public struct Point { public int _x; public int _y; public int X { get { return _x; } set { _x = value; } } public int Y { get { return _y; } set { _y = value; } } public Point(int x, int y) { _x = x; […]

c#将struct转换为另一个struct

有什么办法,如何转换这个: namespace Library { public struct Content { int a; int b; } } 我在Library2.Content中有结构,其数据定义方式相同( { int a; int b; } ),但方法不同。 有没有办法将struct实例从Library.Content转换为Library2.Content? 就像是: Library.Content c1 = new Library.Content(10, 11); Library2.Content c2 = (Libary2.Content)(c1); //this doesn’t work

用户定义的结构是否inheritance了重载的==运算符?

如果引用类型不重载等于运算符== ,则将使用Object上的内置相等运算符。 为什么用户定义的structs不一样: struct A{ } static void Main(string[] args) { A a = new A(); A a1 = new A(); bool equal= (a == a1); //error } 也就是说, ValueType (所有structs派生自哪个)也不会重载==运算符?

如何使用pinvoke将C struct数组指针指向C#

我试图使用pinvoke来编组从C到C#的另一个结构内的结构数组。 AFAIK,没有办法。 所以相反,在C结构中,我向我的数组和malloc声明了一个ptr。 问题:1)如何在C#端声明等效? 2)如何在C#端分配和使用等效的? //The C code typedef struct { int a; int b; } A; typedef struct { int c; // A myStruct[100]; // can’t do this, so: A *myStruct; } B; //The c# code: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public class A{ int a; int b; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public class […]

在C#中销毁struct对象?

我有点困惑的是,在C#中只有引用类型被垃圾收集。 这意味着GC只选择内存解除分配的引用类型。 那么值类型会发生什么呢?因为它们也会占用堆栈上的内存?