C++结构体

typedef struct VidyoClientRequestGetWindowsAndDesktops_

{

/*! The number of application windows currently open */

VidyoSizeT numApplicationWindows;

/*! List of open application window names (UTF-8) (Localized) */

char appWindowName[MAX_NUM_APP_WINDOWS][MAX_URI_LEN];

/*! List of open application window application names (UTF-8) (Localized) */

char appWindowAppName[MAX_NUM_APP_WINDOWS][MAX_URI_LEN];

/*! List of open application window handles */

VidyoWindowCapturerWindowId appWindowId[MAX_NUM_APP_WINDOWS];

/*! List of open application window geometries */

VidyoRect appWindowRect[MAX_NUM_APP_WINDOWS];

/*! The number of system desktops currently available */

VidyoSizeT numSystemDesktops;

/*! List of available system desktop names (UTF-8) (Not localized) */

char sysDesktopName[MAX_SHARE_DISPLAY_DEVICE][MAX_URI_LEN];

/*! List of available system desktop handles */

VidyoWindowCapturerWindowId sysDesktopId[MAX_SHARE_DISPLAY_DEVICE];

/*! List of available system desktop geometries */

VidyoRect sysDesktopRect[MAX_SHARE_DISPLAY_DEVICE];

} VidyoClientRequestGetWindowsAndDesktops;

C# 翻译

[Serializable]

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]

unsafe public struct VidyoClientRequestGetWindowsAndDesktops

{

public uint numApplicationWindows;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUM_APP_WINDOWS * MAX_URI_LEN)]

public byte[] appWindowName;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUM_APP_WINDOWS * MAX_URI_LEN)]

public byte[] appWindowAppName;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_NUM_APP_WINDOWS)]

public uint[] appWindowId;

[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = MAX_NUM_APP_WINDOWS)]

public VidyoRect[] appWindowRect;

public uint numSystemDesktops;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_SHARE_DISPLAY_DEVICE * MAX_URI_LEN)]

public byte[] sysDesktopName;

[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_SHARE_DISPLAY_DEVICE)]

public uint[] sysDesktopId;

[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = MAX_SHARE_DISPLAY_DEVICE)]

public VidyoRect[] sysDesktopRect;

public string[] GetappWindowList()

{

int numApp = (int)(numApplicationWindows);

string[] appWindowList = new string[numApp];

byte[] bytUTF8 = new byte[MAX_URI_LEN];

for (int i = 0; i < numApplicationWindows; i++)

{

for (int j = 0; j < MAX_URI_LEN; j++)

{

bytUTF8[j] = appWindowName[j + i * Vidyo32.MAX_URI_LEN];

}

if (bytUTF8[0] != 0)

{ appWindowList[i] = UnicodeStringFromUtf8Array(bytUTF8); }

else

{ appWindowList[i] = ""; }

}

return appWindowList;

}

public string[] GetappWindowAppList()

{

int numApp = (int)(numApplicationWindows);

string[] appWindowList = new string[numApp];

byte[] bytUTF8 = new byte[MAX_URI_LEN];

for (int i = 0; i < numApplicationWindows; i++)

{

for (int j = 0; j < MAX_URI_LEN; j++)

{

bytUTF8[j] = appWindowAppName[j + i * Vidyo32.MAX_URI_LEN];

}

if (bytUTF8[0] != 0)

{ appWindowList[i] = UnicodeStringFromUtf8Array(bytUTF8); }

else

{ appWindowList[i] = ""; }

}

return appWindowList;

}

public string[] GetDesktopList()

{

int numApp = (int)(numSystemDesktops);

string[] appWindowList = new string[numApp];

byte[] bytUTF8 = new byte[MAX_URI_LEN];

for (int i = 0; i < numSystemDesktops; i++)

{

for (int j = 0; j < MAX_URI_LEN; j++)

{

bytUTF8[j] = sysDesktopName[j + i * Vidyo32.MAX_URI_LEN];

}

if (bytUTF8[0] != 0)

{ appWindowList[i] = UnicodeStringFromUtf8Array(bytUTF8); }

else

{ appWindowList[i] = ""; }

}

return appWindowList;

}

};

static public string UnicodeStringFromUtf8Array(byte[] bytUTF8)

{

byte[] bytUnicode = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, bytUTF8);

int cntUnicode = Encoding.Unicode.GetCharCount(bytUnicode);

char[] charUnicode = Encoding.Unicode.GetChars(bytUnicode);

int j = 0;

for (; j < cntUnicode; j++)

{

if (charUnicode[j] == 0)

break;

}

string strUnicode = Encoding.Unicode.GetString(bytUnicode, 0, j * 2);

return strUnicode;

}

C++/C#结构体转化-二维数组-bytes To Strings的更多相关文章

  1. C++/C#结构体转化-二维数组

    String To bytes typedef struct VidyoClientInEventGroupChat_ { /*! Message (contents) to be sent to a ...

  2. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

  3. 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)

    一位数组: #include <stdio.h> #include<string.h> #define N 5 void luru(float s[],int n); void ...

  4. 【原创】只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(四)

    全系列Index: [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(一) [原创]只学到二维数组和结构体,不用链表也能写一个C贪食蛇?(二) [原创]只学到二维数组和结构体,不用链表也能 ...

  5. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  6. c动态分配结构体二维数组

    这个问题我纠结了蛮久了,因为前面一直忙(自己也懒了点),所以没有能好好研究这个.希望这篇文章能够帮助你们. #include <stdio.h> #include <stdlib.h ...

  7. JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想

    JAVA之旅(三)--数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好 ...

  8. js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  9. 二维数组转化为一维数组 contact 与apply 的结合

    将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...

随机推荐

  1. div简单布局理解

    以下是div的理解

  2. [Oracle] - 性能优化工具(3) - ADDM

    ADDM 通过检查和分析AWR获取的数据来推断Oracle数据库中可能的问题.并给出优化建议. 获取ADDM的方法例如以下: @?/rdbms/admin/addmrpt.sql 以下能够看一个样例: ...

  3. google自定义站内搜索

    ttps://www.google.com/cse/docs/cref.html?hl=zh-cn 重要表单参数: action 字段:您希望存储结果的网址(在该例中,我们使用 http://www. ...

  4. ADT Example

    Example Data Types: Integer, and Character Example (Integer Data Type) The integer data type can con ...

  5. C#中使用日志类,添加dll时出现错误

    警告 1 未能解析引用的程序集 “log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, proces ...

  6. C# foreach获取集合元素索引的坑

    ,}; foreach(var prepareId in prepareIds) { Console.WriteLine(prepareIds.IndexOf(prepareId)); } 执行结果如 ...

  7. WindowsService服务的C#实现

    WindowsService(简称服务,下同)是目前做客户端软件后台运行功能的非常好的选择,本文基本解决了服务的创建和编写,代码控制服务的安装.卸载.启动.停止等,为服务传递参数,其他注意事项等 1. ...

  8. SQL Server 备份维护计划

    1. 创建维护计划:SSMS -> 管理 -> 维护计划 -> 新建维护计划 2. 添加子计划(备份计划) a) 每30分钟:事务日志备份  每天:差异备份  每周:完整备份 b) ...

  9. api(一) 创建窗口 (转)

    所有的Windows SDK编程都有一个类似的框架,本文就说说这个框架,Windows程序设计的框架分为“三部曲”: 一.注册窗口类 注册窗口类的API函数是RegisterClass或者Regist ...

  10. java泛型问题 关于警告:XX is a raw type

    (本文例子适用于JDK 5.0, 学习请先安装并配置!!!)         我们从一个简单的例子开始:假设我们现在需要一个专用来存储字符串的List,该如何实现?呵呵,这还不简单,且看如下代码:   ...