草庐IT

PtrToStructure

全部标签

c# - 调用 Marshal.PtrToStructure 时出现 AccessViolationException

我通过调用Marshal.PtrToStructure(intPtr,typeof(Servent))得到一个AccessViolationExcpetion。任何想法我做错了什么?我在x64上试过这个。IntPtrintPtr=NativeMethods.GetServByName(name,"tcp");if(intPtr!=IntPtr.Zero){Serventservent=(Servent)Marshal.PtrToStructure(intPtr,typeof(Servent));result=System.Convert.ToInt32(IPAddress.Networ

c# - 我是否需要删除非托管代码中通过 Marshal.PtrToStructure 编码(marshal)的结构?

我有这个C++代码:extern"C"__declspec(dllexport)VOIDAllocateFoo(MY_DATA_STRUCTURE**foo){*foo=newMY_DATA_STRUCTURE;//dostufftofoo}然后在C#中我这样调用函数:[DllImport("MyDll.dll")]staticexternvoidAllocateFoo(outIntPtrpMyDataStruct);...MyDataStructureGetMyDataStructure(){IntPtrpData;ManagedAllocateFooDelegate(outpDat

c# - Marshal.PtrToStructure(并再次返回)和字节顺序交换的通用解决方案

我有一个系统,其中远程代理发送序列化结构(来自嵌入式C系统)供我通过IP/UDP读取和存储。在某些情况下,我需要发回相同的结构类型。我认为我使用Marshal.PtrToStructure(接收)和Marshal.StructureToPtr(发送)进行了很好的设置。但是,一个小问题是网络大端整数需要转换为我的x86小端格式才能在本地使用。当我再次将它们送走时,bigendian是必经之路。这里是有问题的函数:privatestaticTBytesToStruct(refbyte[]rawData)whereT:struct{Tresult=default(T);GCHandlehan