Silverlight 编程 之 如何绕过unsafe mode
来源:互联网 发布:林黛玉美图 知乎 编辑:程序博客网 时间:2024/05/16 12:47
虽然同为C#语言,但Silverlight不支持unsafe mode下的编程,下面将针对具体问题介绍一些替代方法。
我们经常会用到
unsafe
{
//Marshal.Copy(frame.packet, 0, (IntPtr)(&pattern), sizeof(PatternModel));
}
由于不支持unsafe mode,所以我们可以通过如下方式解决:
static void Main(string[] args)
{
double d = 3.14159d;
byte[] b = ToByteArray(d);
Console.WriteLine(b.Length);
Console.ReadLine();
double n = FrpmByteArray(b);
Console.WriteLine(n.ToString());
Console.ReadLine();
}
public static byte[] ToByteArray(object anything)
{
int structsize = Marshal.SizeOf(anything);
IntPtr buffer = Marshal.AllocHGlobal(structsize);
Marshal.StructureToPtr(anything, buffer, false);
byte[] streamdatas = new byte[structsize];
Marshal.Copy(buffer, streamdatas, 0, structsize);
Marshal.FreeHGlobal(buffer);
return streamdatas;
}
public static double FromByteArray(byte[] b)
{
GCHandle handle = GCHandle.Alloc(b, GCHandleType.Pinned);
double d = (double)Marshal.PtrToStructure(
handle.AddrOfPinnedObject(),
typeof(double));
handle.Free();
return d;
}
通常针对特殊的数据类型如structure / class data,常常编译会报错
The structureType parameter layout is not sequential or explicit
针对类定义可以仿照如下方式定义
[StructLayout(LayoutKind.Sequential)]
public class AnyName{ ... }
或者将类定义为struct
public struct AnyName{ ... }
此外针对特殊的类型如enum,可以仿照下面的方式处理
// byte 2 structure
GCHandle handle = GCHandle.Alloc(frame.packet, GCHandleType.Pinned);
Type type = typeof (PatternModel);
pattern = (PatternModel)Marshal.PtrToStructure(
handle.AddrOfPinnedObject(),
Enum.GetUnderlyingType(typeof(PatternModel)));
handle.Free();
下面给大家推荐一些好的帖子供进一步学习:
http://stackoverflow.com/questions/2079868/marshal-ptrtostructure-throwing-system-argumentexception-error
- Silverlight 编程 之 如何绕过unsafe mode
- Silverlight编程 之 路径问题
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类
- JAVA并发编程学习笔记之Unsafe类 (r)
- JAVA并发编程学习笔记之Unsafe类
- C#学习之unsafe
- 如何绕过防火墙?
- 如何绕过防注入
- Silverlight编程 之 路径问题(补充)
- Silverlight 4之全方位剖析:多线程编程
- .Net中unsafe编程详解
- 来到JJ5900595
- linux /dev目录
- linux用户和用户组
- 复选框的全选实现方式
- C++读书笔记之泛型编程&&虚函数表&&volatile
- Silverlight 编程 之 如何绕过unsafe mode
- IEnumerable 与IEnumerator区别
- 一个开始
- hdoj3785
- ado.net command命令理解
- 软件团队合并角色
- Python写爬虫抓站的一些技巧
- Android平台总揽
- Hive2D开发手记(0):起源