zoukankan      html  css  js  c++  java
  • c#的Marshal

    补充过程中~
    感觉应该是C#调用非托管的比较专门的class
    
    例1、
    public struct ImageDataMsg 
    { 
    public char DataType; 
    public int Srv_index; 
    public char ConvertType; 
    //这个个地方要指定长度,这样就可以的德奥结构体的正确长度了 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] 
    public int[] VecLayer;//需要那几个图层。 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] 
    public int[] GridLayer;//需要那几个栅格图层 
    public int Scale_index;//需要的是那个比例尺的图像 
    public int x_pos; 
    public int y_pos; 
    public int ClientArea_x; 
    public int ClientArea_y; 
    } 
    //使用这个方法将你的结构体转化为bytes数组 
    public static byte[] Struct2Bytes(ImageDataMsg obj) 
    { 
    int size = Marshal.SizeOf(obj); 
    byte[] bytes = new byte[size]; 
    try 
    { 
    IntPtr ptr = Marshal.AllocHGlobal(size); 
    Marshal.StructureToPtr(obj, ptr, false); 
    Marshal.Copy(ptr, bytes, 0, size); 
    Marshal.FreeHGlobal(ptr); 
    return bytes; 
    } 
    catch (Exception ee) 
    { 
    MessageBox.Show(ee.Message); 
    return bytes; 
    } 
    } 
    
    //使用这个方法将byte数组转化为结构体 
    public static object BytesToStuct2(byte[] bytes, ImageDataMsg type) 
    { 
    //得到结构体的大小 
    int size = Marshal.SizeOf(type); 
    //byte数组长度小于结构体的大小 
    if (size > bytes.Length) 
    { 
    //返回空 
    return null; 
    } 
    //分配结构体大小的内存空间 
    IntPtr structPtr = Marshal.AllocHGlobal(size); 
    //将byte数组拷到分配好的内存空间 
    Marshal.Copy(bytes, 0, structPtr, size); 
    //将内存空间转换为目标结构体 
    object obj = Marshal.PtrToStructure(structPtr, typeof(ImageDataMsg)); 
    //释放内存空间 
    Marshal.FreeHGlobal(structPtr); 
    //返回结构体 
    return obj; 
    } 
    

      

  • 相关阅读:
    linux配置显示git分支名
    tensorrt int8量化原理几点问题记录
    cuda Global Memory Access
    cuda shared memory bank conflict
    一种简单的死锁检测算法
    n = 5x+2y+z,程序优化:unroll loop
    c++ detect && solve integer overflow
    Tensorpack.MultiProcessPrefetchData改进,实现高效的数据流水线
    tensorflow layout optimizer && conv autotune
    python 产生token及token验证
  • 原文地址:https://www.cnblogs.com/cfas/p/3139083.html
Copyright © 2011-2022 走看看