Tag: struct

C#中的C ++ Struct

我使用DllImport在我的C#项目中使用C ++编写的DLL,我使用的其中一个函数如下所示: [DllImport(“dds.dll”, CharSet = CharSet.Auto)] private static extern int Par( ddTableResults2 tableResult, ref parResults ParResult, int vul ); parResults结构在C ++中定义如下: struct parResults { /* index = 0 is NS view and index = 1 is EW view. By ‘view’ is here meant which side that starts the bidding. */ char parScore[2][16]; char parContractsString[2][128]; }; […]

C#如何通过Reflection设置StructLayoutAttribute.Pack?

我通过reflection动态创建一个C#结构,当我在调试器中检查struct的Type时,我注意到StructLayoutAttribute.Pack默认为8.我想将Pack设置为1。 基本上,我想通过reflection来做可以通过将此属性添加到结构的声明来完成的操作: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] 我在创建类型后尝试使用reflection,但由于StructLayoutAttribute属性没有Setter,因此会抛出exception。 我的预感是它需要在ModuleBuilder.DefineType(我当前正在设置LayoutKind等)的调用中发生,但我没有看到任何明显的相应TypeAttribute 。 任何指针赞赏。 这里有完整的课程代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Reflection.Emit; namespace AcmeCo.Serializable { public class DynamicSimStructBuilder { private static Type structType; public static object GetStructInstance() { object ptInstance = Activator.CreateInstance(GetStruct(), new object[] { }); return ptInstance; } public static […]

为什么我会在创建和返回新结构时遇到此错误?

编译此代码时出错: using System; public struct Vector2 { public event EventHandler trigger; public float X; public float Y; public Vector2 func() { Vector2 vector; vector.X = 1; vector.Y = 2; return vector; // error CS0165: Use of unassigned local variable ‘vector’ } } 您好! 编译器说:“使用未分配的局部变量’vector’”并指向返回值。 在我看来,Vector2成为一个引用类型(没有事件成员它正常行事)。 怎么了?

编组C#结构为DX11 cbuffers

我有一些问题(我认为)在C#中打包我的结构并将它们传递给我在HLSL中注册的cbuffers。 当我以一种方式打包我的结构时,信息似乎能够传递到着色器: [StructLayout(LayoutKind.Explicit, Size = 16)] internal struct TestStruct { [FieldOffset(0)] public Vector3 mEyePosition; [FieldOffset(12)] public int type; } 当我创建这个结构并将其设置为我在C#中的常量缓冲区时,它似乎工作正常。 我得到了我期望的颜色: cbuffer PerFrame : register(b0) { Vector3 eyePos; int type; } float3 GetColour() { float3 returnColour = float(0.0f, 0.0f, 0.0f); switch(type) { case 0: returnColour = float3(1.0f, 0.0f, 0.0f); break; case 1: returnColour = float3(0.0f, […]

将动态大小数组编组到struct中

如何定义具有动态大小数组的结构? 这样对吗? struct MyStruc { public int len; [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] public int buf[]; }

struct中的对齐错误/非对象字段

我对我的结构使用以下定义: [StructLayout(LayoutKind.Explicit)] public struct NetworkMessage { [FieldOffset(0)] public MessageType Type; [FieldOffset(4)] public bool GatewayMessage; //AuthenticationRequest [FieldOffset(5)] public char[] AuthenticationUsername; //20 charachters long [FieldOffset(13)] public byte[] AuthenticationPasswordHash; // 16 bytes long //Authntication result [FieldOffset(5)] public bool AuthenticationSuccess; [FieldOffset(6)] public char[] AuthenticationMessage; } 但是,当我尝试使用此类型时,我收到此错误消息: System.TypeLoadException:无法从程序集中加载类型“NetworkMessage”,因为它包含偏移量为5的对象字段,该字段未正确对齐或由非对象字段重叠。 非对象字段是指一个值是一个值,一个是引用吗? 我可以不混用这些吗? 任何帮助深表感谢。 谢谢,Venatu 编辑:抱歉,我应该更加明确,因为我打算将其作为一种伪结合。 重叠是字段是有意允许我使用一个结构作为多种类型的消息,使缓冲和传递系统更容易。 对不起任何困惑

如何使用struct属性创建默认值?

我想知道如何将[DefaultValue]属性应用于struct属性。 您可以注意到Microsoft使用Form的大小和许多其他属性来完成它。 他们的值类型是Size,Point等。我想用自定义结构做同样的事情。

我何时应该明确指定StructLayout?

我正在摆弄从C#调用DLL,并且需要定义我自己的结构。 很多文章强制结构的顺序布局 [StructLayout(LayoutKind.Sequential)] struct Foo … 所以,我按照套件,我的程序工作。 现在,当我把线路拿出来时,它仍然可以工作。 我为什么需要它?

当用作函数的返回值时,C#结构是否曾被装箱?

一个简单的问题,但我还没有在Stack Overflow上找到明确的答案。 struct foo { int x; int y; int z; } foo Func() { return new foo(); } void Func2() { foo f = Func(); // did boxing and unboxing occur? } 从函数返回时,C#struct(值类型)是否总是复制到堆栈中,无论它有多大? 我不确定的原因是,对于除MSIL之外的某些指令集(例如x86),返回值通常需要适合处理器寄存器,并且不直接涉及堆栈。 如果是这样,那么调用站点是否为CLR堆栈预先分配了(预期)值返回类型的空间? [编辑:回复摘要:]对于原始问题的意图,答案是否定的; CLR永远不会(默默地)将结构化为仅仅为了将其作为返回值发送。

从c#中inheritance结构的梦想

在那里,我正在使用C#XNA 4.0进行2D游戏,并再次遇到我的小烦恼; 矩形 。 对于那些使用基本碰撞的人来说,这几乎是必需的。 对于几乎所有创建的游戏对象,您需要有一个矩形。 然后我去改变X,检查碰撞或其他任何东西。 在那里,我开始了objectName.Rectangle.Whatever的永无止境的战斗。 为了解决这个问题,我当然会给出一些objectName属性/方法来为我访问这些属性/方法。 然后我敢于梦想。 我有一个伟大的设计来制作一个基本的游戏对象类,所有drawable将inheritance,这将允许父母,精确的本地坐标(浮点数),并保持纹理/ spritebatch。 为了完成这个,我准备从Rectangleinheritance,使用它所拥有的所有方法和属性。 哎呀,每当需要一个Rectangle的东西时,我可能会懒得说objectName,而不是objectName.Rectangle。 然后我意识到,不是机会。 我开始感到沮丧,因为我很聪明的想法被砸碎了。 从那以后,我完美的小class级拥有一个矩形,各种方法和属性根据需要访问它。 我也有机会从XNA DrawableGameComponentinheritance它。 虽然从长远来看这更实用,每次我查看绘制或更新方法并看到我经常想到的矩形调用时,是否有希望做我想要的事情? 我可以做一些聪明的工作吗? 或者是从一个真正被我掌握的矩形inheritance而来? 虽然使用XNA中提供的DrawableGameComponent类允许大多数与游戏对象相关的操作发生在类Update()方法中,但每次在类之外我都需要引用而不是Rectangle的属性,而是Rectangle本身,我稍微考虑到实际上我的对象实际上是各种方式,并且加强了Rectangle。 然后我再一次发现自己在问: 有没有办法从预定义的结构inheritance,或者给项目留下你的印象(一种解决方法)?