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. 全国计算机等级考试二级教程-C语言程序设计_第8章_地址和指针

    面试: unsigned int *p1 = &num; int *p2 = &num; #define _CRT_SECURE_NO_WARNINGS #include<std ...

  2. const和define的区别

    1.在使用const定义常量时,只能使用标量初始化; 但我们可以使用任何表达式初始化define定义的常量 2.我们可以在条件表达式中使用define定义常量,但绝对不能使用const eg: def ...

  3. 《think in python》学习-6

    think in python 有返回函数 我们使用过的内置函数中,有一部分会返回结果,比如 math的 返回值 我们写一个有返回值的函数,计算给定半径的圆的面积,例如这个: def area(rad ...

  4. C#生成ACCESS文件几点注意事项

    1.bin文件夹下有没有Interop.ADOX.dll文件. 2.当前服务器有没有安装access 64位驱动,若没有,可安装AccessDatabaseEngine_X64.exe文件. 3.生成 ...

  5. android webview点击返回键返回上一级activity

    android webview点击返回键返回上一个activity @Override public boolean onKeyDown(int keyCode, KeyEvent event) { ...

  6. ssh框架的搭建

    SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层,以 ...

  7. C++ Builder平台使用Indy9开发自动FTP程序01

    Indy9与CB自带的Indy8不同处还是挺多的.首先就是图标变漂亮了,其次很多Method都重写了.它主要是依据Delph里的函数,力求与之相通.不同点在本系列的后续章节中会一一介绍. 在写ftp代 ...

  8. QF——OC数组

    OC中的数组: OC中的数组和它的字符串有很多相似之处.也分为可变和不可变. NSArray:不可变数组,一经初始化,便不能再更改: NSMutableArray:可变数组,它其实是继承于NSArra ...

  9. OC语法3——点语法,self关键字

    点语法:   为了给程序员提供便捷,OC中也引入了点语法.不过它和Java中点语法的意义是完全不同的. 在Java中无论调用任何方法,还是访问public类型的成员变量都是用点语法(.号). 而在OC ...

  10. java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception

    在使用ajax主题时出现上述错误的解决办法是将form表单中的action属性值改为*.action后就可以解决.至于为什么会这样不太明白.但是修改action的属性值以后就会出现另一个错误即 对应的 ...