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. JAVA布局管理器

    JAVA的界面布局原理:由于Java是跨平台语言,使用绝对坐标显然会导致问题,即在不同平台.不同分辨率下的显示效果不一样.Java 为了实现跨平台的特性并且获得动态的布局效果,Java将容器内的全部组 ...

  2. Eclipse快捷键大全(一)

    Eclipse快捷键大全(一) 常用(系统默认): 1.Format (自动排版) : Ctrl+Shift+F 2.Organize Imports (自动导入) : Ctrl+Shift+O 3. ...

  3. 获取xml文件

    <?xml version="1.0" encoding="utf-8" ?><ArrayOfSystemRool xmlns:xsi=&qu ...

  4. [key]严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener(Spring配置异常)

    详细错误为: 严重: Exception sending context initialized event to listener instance of class org.springframe ...

  5. Oracle EBS Concurrent Request:Gather Schema Statistics[Z]

    Oracle EBS 的Concurrent Request"Gather Schema Statistics"是一个和性能相关的Concurrent Program,它会对表,列 ...

  6. 【转】CodeGear RAD 2007 SP4

    转自:http://blog.csdn.net/Rzhghost/article/details/2512150 CodeGear RAD 2007 up4最新下载及破解 官方http下载:http: ...

  7. 用正则表达式替换内容 php

    以前做一个项目,就是有一个问答的页面,比如说在回答或者提问的内容中插入表情.写到内容里的是表情图片的名字(而且是不带后缀的,比如:f_002.png)表情包放在项目里,我需要在取除内容的时候将里面的表 ...

  8. 持续集成 之 apache-continuum

    作者:许振坪,http://blog.csdn.net/benkaoya 1.前言 最近在研究持续集成,摸索了很多持续集成的工具,Apache Continuum也包括其中.既然飞过,那就留下点什么吧 ...

  9. css3中动画animation的应用

    <!DOCTYPE html> <html> <head> <style> /* @-webkit-keyframes anim1 { // 规定动画. ...

  10. property、synthesize、id

    1.@property int age; 在编译器情况下会自动编译展开为: <age在setter中首字母大写,点语法为p.age> - (void)setAge:(int)age; - ...