C++ Coder

HCP高性能计算架构,实现,编译器指令优化,算法优化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首页 新随笔 联系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

#

http://blog.csdn.net/liuyuze/article/details/2865118

 Linux下有很多压缩工具,7z是已知最大压缩比的工具,它的使用比较复杂,以下我记下的一些技巧

 

压缩命令(结合tar命令): tar cf - /home/test | 7z a -si test.tar.7z

                 上面命令将 /home/test 文件夹压缩为 test.tar.7z 文件

解压命令(结合tar命令)  :   7z x -so test.tar.7z | tar xf - /home/alex

                                                    这个命令将test.tar.7z 的内容解压到 /home/alex目录下

 

根据不同需要,还可以设置不同压缩比 ,这个命令特别适合做RAMDISK时候使用,大大节省宝贵的空间,希望对各位有帮助!

 

下面是压缩参数设置,引用地址:http://anywolfs.com/liuhui/7-zip/cmdline/switches/method.htm

原文如下

-m (设置压缩算法) 选项

指定压缩算法。

语法

-m<method_parameters>

此选项的格式依压缩档案的类型而定。

Zip

参数 默认值 说明
x=[0 | 5 | 9 ] 5 设置压缩等级。
m={MethodID} Deflate 设置压缩算法:Copy、Deflate、Deflate64、BZip2。
fb={NumFastBytes} 32 设置 Deflate 编码器的单词大小。
pass={NumPasses} 1 设置 Deflate 编码器的传送大小。

 

x=[0 | 5 | 9 ]

设置压缩等级

压缩等级 说明
0 不压缩。
5 默认的压缩等级。
9 最大压缩等级。压缩后的文件会更小。但是在压缩的时候会比较慢而且需要较多的物理内存。
fb={NumFastBytes}

设置 Deflate 编码器的单词大小。您可以在 3 到 255 范围之内更改。在 Deflate 算法下,它的默认值是 32;在 Deflate 64 算法下,它的默认值是 64。如果要压缩的多个文件中,有很多排列相同的字节,比如说内容及格式极为相同的两个纯文本文档,那么在压缩的时候如果有较大的单词大小,将会在一定程度上提高压缩比。所以,通常情况下,其数量越大,压缩后的文件就会越小。但是在压缩和解压缩的时候会比较慢而且需要较多的物理内存。

pass={NumPasses}

设置 Deflate 编码器的传送大小。您可以在 1 到 4 范围之内更改。在 Deflate 算法下,它的默认值是 1;在 Deflate 64 算法下,它的默认值是 3。此项可略微提升压缩比,但并不明显。

GZip

除了 GZip 不支持“储存”压缩算法之外,GZip 和 Zip 一样使用着相同的参数。

7z

参数 默认 说明
x=[0 | 1 | 5 | 7 | 9 ] 5 设置压缩等级。
s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g] on 设置固实模式。
f=[off | on] on 开启或关闭可执行文件压缩过滤器。
hc=[off | on] on 开启或关闭档案文件头压缩。
hcf=[off | on] on 开启或关闭档案文件头完全压缩。
he=[off | on] off 开启或关闭档案文件头加密。
b{C1}[s{S1}]:{C2}[s{S2}] 设置编码器之间绑定。
{N}={MethodID}[:param1][:param2][..] LZMA 设置压缩算法:LZMA、PPMd、BZip2、Deflate、BCJ、BCJ2、Copy。
mt=[off | on] off 设置多线程模式。

 

x=[0 | 1 | 5 | 7 | 9 ]

设置压缩等级

压缩等级 说明
0 不压缩.
1 快速压缩:LZMA 快速算法、32KB 字典大小、HC3 Match finder、BCJ 过滤器。
5 正常压缩:LZMA 标准算法、2 MB 字典大小、BT4 Match finder、单词大小为 32、BCJ 过滤器。
7 最大压缩:LZMA 最大算法、8 MB 字典大小、BT4 Match finder、单词大小为 64、BCJ 过滤器。
9 极限压缩:LZMA 最大算法、32 MB 字典大小、BT4b Match finder、单词大小为 64、BCJ2 过滤器。
s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g)]

开启或关闭固实模式。此选项的默认值是 s=on。开启或关闭固实压缩档案模式。在创建固实压缩档案模式中,它把压缩档案中的所有文件都当成一个连续数据流来看待。通常情况下,固实压缩可增加压缩比,特别是在添加大量小文件的时候。

e 为每一种文件扩展名使用单独的固实数据流
{N}f 设置在一个固实数据流种文件的个数
{N}b | {N}k | {N}m | {N}g 设置固实数据流的大小(字节)

不同的压缩等级对固实数据流大小的限制:

压缩等级 大小
储存 0 B
快速 16 MB
正常 256 MB
最大 1 GB
极限 4 GB

对固实数据流大小的限制虽然能应响到压缩比,但是它还是有相当多的优势:

  • 万一压缩档案损坏,并不会丢失所有数据。
  • 减少了文件的释放时间。

在当前的版本中,您只能更新在压缩时未选择“创建固实压缩档案”的压缩档案。也就是说当前版本不支持固实压缩档案的更新。

示例:

        -s=100f10m

设置固实模式使每个固实数据流种最多 100 文件,并且最大 10 MB 。

f=[off | on]

开启或关闭可执行文件压缩过滤器:dll、exe、ocx、sfx、sys。它用于 BCJ2 过滤器(使用极限压缩)及 BCJ 过滤器中。此选项的默认值是 f=on.

hc=[off | on]

开启或关闭档案文件头压缩。此选项的默认值是 hc=on。如果开启档案文件头压缩,一部分档案的文件头将使用 LZMA 算法进行压缩。

hcf=[off | on]

开启或关闭档案文件头完全压缩。此选项的默认值是 hcf=on。如果开启档案文件头完全压缩,那么此压缩档案只有 7-Zip 2.30 beta 25 及更高的版本才能支持。

he=[off | on]

开启或关闭档案文件头加密。此选项的默认值是 he=off。

{N}

设置算法的顺序。它也可以用算法关联参数。最小值为 0。含有从号的算法将被首先使用。

b{C1}[s{S1}]:{C2}[s{S2}]

将输出流 S1 及编码器 C2 中的输入流 S2 与编码器 C1 绑定。如果未指定流的大小,那么大小将为 0。

通常情况下,编码器有一个输入流及一个输出流。而在 7z 中,一些编码器有多个输入及输出流。

举个例子,BCJ2 编码器有有关输入流及四个输出流。

mt=[off | on]

开启或关闭多线程压缩模式。在多线程支持模式中,7-Zip 将使用两个线程来进行压缩。这样的话,对于多处理器系统,那么压缩速度将提升 70-80%。对于 Pentium 4 超线程处理器,压缩速度将提升 25% 左右。但解压缩时只使用单独线程。注意!此选项仅对 LZMA 压缩算法有效。

{N}={MethodID}[:param1][:param2] ... [:paramN]

设置压缩算法。在 7z 格式中,您可以使用许多压缩算法。此选项的默认算法是 LZMA。

此参数必须是下列格式中的任意一种:

  • {ParamName}={ParamValue}。
  • {ParamName}{ParamValue},{ParamValue} 是一个数值,并且 {ParamName} 中不包含数字。

支持的压缩算法:

MethodID 说明
LZMA 基于 LZ 之上的压缩算法。
PPMd 基于 Dmitry Shkarin 之上的算法 PPMdH 并加以优化。通常能对纯文本提供高压缩比及较快的解压缩速度。
BZip2 基于 BWT 的标准压缩算法。通常能对纯文本提供较高压缩比及相当不错的解压缩速度。
Deflate ZIP 及 GZip 格式的标准压缩算法。没有很高的压缩比。但是它拥有十分快的压缩及解压缩速度。Deflate 压缩算法只支持 32 KB 字典大小。
BCJ (CALL、JUMP)32 位 x86 可执行文件转换器。
BCJ2 (CALL、JUMP、JCC)32 位 x86 可执行文件转换器(第二版)。
Copy 不压缩。

LZMA

LZMA 是基于 Lempel-Ziv(由以色列数学家 A.Lempel 和 J.Ziv 共同开发的压缩算法)之上的压缩算法。它能提供相当快的解压缩速度(约比压缩快 10 到 20 倍)。对内存的需求也不尽相同(详细信息请参见 d={Size}[b|k|m] 选项)。

参数 默认值 说明
a=[0|1|2] 1 设置压缩等级
d={Size}[b|k|m] 20 设置字典大小
mf={MF_ID} bt4 设置匹配器
fb={N} 32 设置紧缩字节数量
lc={N} 3 设置 Literal Context 块数 - [0, 8]
lp={N} 0 设置 Literal Pos 块数 - [0, 4]
pb={N} 2 设置 Pos 块数 - [0, 4]
a=[0|1|2]

设置压缩等级:0=快速、1=正常、2=最大压缩。默认值为 1。

d={Size}[b|k|m]

设置 LZMA 压缩算法的字典大小。您可以使用字节、KB 或 MB 来指定此项。字典大小的最大值为 256 MB=2^28 字节。正常模式下,LZMA 的字典大小默认值为 21(2 MB) ;最大模式(-mx=7)下为 23(8 MB);极限模式(-mx=9)下为 25(32 MB)。如果您未指定 [b|k|m] 项,字典大小将自动根据压缩等级来选择相应的单位。对于 LZMA 算法的文件解压缩,若压缩文件的字典大小为 64 MB,则解压缩时就需要 64 兆可用的物理内存。

mf={MF_ID}

设置 LZMA 压缩算法的匹配器。默认算法为 bt4。bt* 类的算法所需的内存比 pat* 类所需的内存少。通常情况下 bt4 的工作速度比 pat* 快得多,然而部分文件格式在 pat* 算法中可以工作得很快。hc* 类算法并没有很好得压缩比,但是它与快速模式(a=0)结合使用通常会工作得相当快。所需内存依字典大小而定(参见下表)。

MF_ID 所需内存 说明
bt2 d×9.5 + 1 MB 二进制树;2 散列字节。
bt3 d×9.5 + 65 MB 二进制树;2-3(完整) 散列字节。
bt4 d×9.5 + 6 MB 二进制树;2-3-4 散列字节。
bt4b d×9.5 + 34 MB 二进制树;2-3-4(大) 散列字节。
pat2r d×26 + 1 MB Patricia 树;2-位节点;可移动。
pat2 d×38 + 1 MB Patricia 树;2-位节点。
pat2h d×38 + 77 MB Patricia 树;2-位节点;2-3 散列字节。
pat3h d×62 + 85 MB Patricia 树;3-位节点;2-3 散列字节。
pat4h d×110 + 101 MB Patricia 树;4-位节点;2-3 散列字节。
hc3 d×5.5 + 1 MB Hash Chain;-3 散列字节。
hc4 d×5.5 + 6 MB Hash Chain;2-3-4 散列字节。

注意:操作系统同样需要一部分物理内存来维持系统得正常运行。所以至少要剩余 32 可用物理内存。

fb={N}

设置 LZMA 压缩算法的紧缩字节。有效范围从 5 到 255。正常模式下默认值为 32;最大模式下为 64 。通常情况下,较大的数值能略微提高压缩比。但同时也会降低压缩速度。

lc={N}

设置 Literal Context 位数。有效范围从 0 到 8。默认值为 3。有时压缩档案中含有大文件会自动使用 lc=4。

lp={N}

设置 Literal Pos 位数。有效范围从 0 到 4。默认值为 0。

pb={N}

设置 Pos 位数。有效范围从 0 到 4。默认值为 2。

PPMd

PPMd 是 PPM-based 压缩算法的简写。它基于 Dmitry Shkarin 的算法 PPMdH 并对其源代码加以优化。PPMd 通常能对纯文本提供高压缩比及较快的解压缩速度。压缩和解压缩的速度完全相同,所需的内存大小也一样。

参数 默认值 说明
mem={Size}[b|k|m] 24 设置 PPMd 算法使用内存。
o={Size} 6 设置 PPMd 算法压缩命令。
mem={Size}[b|k|m]

设置 PPMd 算法使用的内存多少。您可以使用字节、KB 或 MB 来指定此项。最大值为 2 GB=2^31 字节;默认值为 24(16MB)。如果您未指定 [b|k|m] 项,字典大小将自动根据压缩等级来选择相应的单位。PPMd 在压缩和解压缩时所需的内存大小是相同的。

o={Size}

设置 PPMd 算法压缩命令。其大小必须在 [2,32] 范围内。默认值为 6。

BCJ2

BCJ2 是 32 位 x86 可执行文件转换器(第二版)。它通过转换分支指令来对文件进行进一步压缩。

BCJ2 编码器有一个输入流和四个输出流:

  • s0:干流。提供进一步的压缩。
  • s1:CALL 值转换流。提供进一步的压缩。
  • s2:JUMP 值转换流。提供进一步的压缩。
  • s3:服务流。它已经备压缩过。

如果使用 LZMA 压缩算法,s1 及 s2 流的字典大小将会比 s0 流的小(512 KB)。

示例

7z a -tzip archive.zip *.jpg -m0

不压缩而直接将 *.jpg 文件添加到 archive.zip 档案。

7z a -t7z archive.7z *.exe *.dll -m0=BCJ -m1=LZMA:d=21 -ms -mmt

添加 *.exe*.dll 文件到固实压缩档案 archive.7z。使用 LZMA 压缩算法、2 MB 字典大小及 BCJ 转换器。压缩将开启多线程优化(如果可用)。

7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3

添加 *.exe*.dll 文件到压缩档案 archive.7z。使用 LZMA 压缩算法、BCJ2 转换器、为主输出流(s0)使用 8 MB 字典大小、LZMA 算法为 BCJ2 转换器的 s1 及 s2 输出流使用 512 KB 字典大小。

7z a -t7z archive.7z *.txt -m0=PPMd

添加 *.txt 文件到压缩档案 archive.7z。 使用 PPMd 压缩算法。

可以和此选项结合使用的命令

a (添加)d (删除)u (更新)

其它

选项: -t (设置压缩档案格式)

posted @ 2012-11-03 14:16 jackdong 阅读(2019) | 评论 (0)编辑 收藏

http://hi.baidu.com/uejwncfuebbprwe/item/30cafb2d3d2e5584af48f54a

本节介绍几个常见的压缩算法。

(一) 字典算法
  字典算法是最为简单的压缩算法之一。它是把文本中出现频率比较多的单词或词汇组合做成一个对应的字典列表,并用特殊代码来表示这个单词或词汇。例如:
  有字典列表:
  00=Chinese
  01=People
  02=China
  源文本:I am a Chinese people,I am from China 压缩后的编码为:I am a 00 01,I am from 02。压缩编码后的长度显著缩小,这样的编码在SLG游戏等专有名词比较多的游戏中比较容易出现,比如《SD高达》。
(二) 固定位长算法(Fixed Bit Length Packing)
  这种算法是把文本用需要的最少的位来进行压缩编码。
比如八个十六进制数:1,2,3,4,5,6,7,8。转换为二进制为:00000001,00000010,00000011,00000100,00000101,00000110,00000111,00001000。每个数只用到了低4位,而高4位没有用到(全为0),因此对低4位进行压缩编码后得到:0001,0010,0011,0100,0101,0110,0111,1000。然后补充为字节得到:00010010,00110100,01010110,01111000。所以原来的八个十六进制数缩短了一半,得到4个十六进制数:12,34,56,78。
这也是比较常见的压缩算法之一。

(三) RLE算法
  这种压缩编码是一种变长的编码,RLE根据文本不同的具体情况会有不同的压缩编码变体与之相适应,以产生更大的压缩比率。

  变体1:重复次数+字符
文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

  变体2:特殊字符+重复次数+字符
文本字符串:A A A A A B C C C C B C C C,编码后得到:B B 5 A B B 4 C B B 3 C。编码串的最开始说明特殊字符B,以后B后面跟着的数字就表示出重复的次数。

  变体3:把文本每个字节分组成块,每个字符最多重复 127 次。每个块以一个特殊字节开头。那个特殊字节的第 7 位如果被置位,那么剩下的7位数值就是后面的字符的重复次数。如果第 7 位没有被置位,那么剩下 7 位就是后面没有被压缩的字符的数量。例如:文本字符串:A A A A A B C D E F F F。编码后得到:85 A 4 B C D E 83 F(85H= 10000101B、4H= 00000100B、83H= 10000011B)

  以上3种不RLE变体是最常用的几种,其他还有很多很多变体算法,这些算法在Winzip Winrar这些软件中也是经常用到的。

(四) LZ77算法
  LZ77算法是由 Lempel-Ziv 在1977发明的,也是GBA内置的压缩算法。LZ77算法有许多派生算法(这里面包括 LZSS算法)。它们的算法原理上基本都相同,无论是哪种派生算法,LZ77算法总会包含一个动态窗口(Sliding Window)和一个预读缓冲器(Read Ahead Buffer)。动态窗口是个历史缓冲器,它被用来存放输入流的前n个字节的有关信息。一个动态窗口的数据范围可以从 0K 到 64K,而LZSS算法使用了一个4K的动态窗口。预读缓冲器是与动态窗口相对应的,它被用来存放输入流的前n个字节,预读缓冲器的大小通常在0 – 258 之间。这个算法就是基于这些建立的。用下n个字节填充预读缓存器(这里的n是预读缓存器的大小)。在动态窗口中寻找与预读缓冲器中的最匹配的数据,如果匹配的数据长度大于最小匹配长度 (通常取决于编码器,以及动态窗口的大小,比如一个4K的动态窗口,它的最小匹配长度就是2),那么就输出一对〈长度(length),距离(distance)〉数组。长度(length)是匹配的数据长度,而距离(distance)说明了在输入流中向后多少字节这个匹配数据可以被找到。

  例如:(假设一个 10个字节的动态窗口, 以及一个5个字节的预读缓冲器)
文本:A A A A A A A A A A A B A B A A A A A
--------------------- =========
动态窗口 预读缓存器
动态窗口中包含10个A ,这就是最后读取的10个字节。预读缓冲器包含了 B A B A A。编码的第一步就是寻找动态窗口与预读缓存器相似长度大于2的字节部分。在动态窗口中找不到B A B A A,所以B就被按照字面输出。然后动态窗口滑过1个字节,现在暂时输出了一个B。
第二步:A A A A A A A A A A A B A B A A A A A
--------------------- =========
动态窗口 预读缓存器
现在预读缓冲器包含A B A A A,然后再和动态窗口进行比较。这时,在动态窗口找到了相似长度为2的A B,因此一对〈长度, 距离〉就被输出了。长度(length)是2 并且向后距离也是2,所以输出为<2,2>,然后动态窗口滑过2个字节。现在已经输出了B <2,2>。
第三步:A A A A A A A A A A A B A B A A A A A
--------------------- =========
动态窗口 预读缓存器
继续上面的方法得到输出结果<5,8>。现在已经输出了B <2,2> <5,8>。
最终的编码结果是:A A A A A A A A A A A B <2,2> <5,8>。
但数组是无法直接用二进制来表示的,LZ77会把编码每八个数分成一组,每组前用一个前缀标示来说明这八个数的属性。比如数据流:A B A C A C B A C A按照LZ77的算法编码为:A B A C<2,2> <4,5>,刚好八个数。按照LZ77的规则,用“0”表示原文输出,“1”表示数组输出。所以这段编码就表示为:00001111B(等于0FH),因此得到完整的压缩编码表示:F A B A C 2 2 4 5。虽然表面上只缩短了1个字节的空间,但当数据流很长的时候就会突出它的优势,这种算法在zip格式中是经常用到。

  除此之外还有很多压缩算法,像霍夫曼编码(Huffman Encoding)等等。这些编码也是非常的著名而且压缩效率极高,不过这些编码的算法相对比较繁琐,规则也很复杂,由于篇幅就不逐一介绍了。如果大家对这方面感兴趣可以到网站相关网站查询资料。

  小结:这一节介绍的几种算法在GBA上是比较容易遇到的典型算法,但绝不是说只有这几种,还是有很多时候都得自己ASM跟踪进行分析,这里介绍给大家希望能拓展大家的思维,方便进行程序分析,对于一切的问题ASM才是万能的。
posted @ 2012-11-03 13:47 jackdong 阅读(917) | 评论 (0)编辑 收藏

Visual Studio 2008控制台程序无法输出中文!?解决方法只需要设置一下区域即可。没有设置区域前如下图:

Visual Studio 2008控制台程序无法输出中文 - 有何不可 - 不要辜负 期望

包含头文件:#include <locale.h>

函数:_tsetlocale(LC_ALL, _T("chs"));

设置区域后如下图:

Visual Studio 2008控制台程序无法输出中文 - 有何不可 - 不要辜负 期望

参考,摘自微软MSDN

控制台中的编码程序员在对控制台或“文本模式”应用程序编程时可同时使用 Unicode 和 SBCS 或 DBCS 编码。出于承袭方面的考虑,非 Unicode 控制台 I/O 函数使用控制台代码页(默认为 OEM 代码页)。Windows 中的所有其他非 Unicode 函数都使用 Windows 代码页。这意味着其他函数可能无法正确地处理由控制台函数返回的字符串,反之亦然。例如,如果 FindFirstFileA 返回了一个包含某个非 ASCII 字符的字符串,WriteConsoleA 将无法正常地显示该字符串。

要一直跟踪哪些函数需要哪些编码并正确转换文本参数的编码非常困难。函数 SetFileApisToOEM、SetFileApisToANSI 和帮助程序函数 AreFileApisANSI 的引入极大地简化了此项工作。前两个函数可接受或返回文件名称,对 KERNEL32.dll 导出的非 Unicode 函数有效果。顾名思义,SetFileApisToOEM 将这些函数设置为接受或返回与当前系统区域设置对应的 OEM 字符集中的文件名称,而 SetFileApisToANSI 用于为这些名称恢复默认值(Windows ANSI 编码)。使用 AreFileApisANSI 可查询到当前选定的编码。

利用 SetFileApisToOEM 可轻松地解决 WindFirstFileA(或 GetCurrentDirectoryA,或 Win32 API 的任何文件处理函数)的结果无法直接传送给 WriteConsoleA 这一问题:在调用 SetFileApisToOEM 后,WindFirstFileA 将返回以 OEM(而不是以 Windows ANSI 字符集)编码的文本。但此解决方案并非应对所有 Windows ANSI 与 OEM 不兼容情况的万能良方。设想您需要从某个文件处理函数中获取文本,然后将其输出到控制台,接着用其他函数(不受SetFileApisToOEM 的影响)处理该文本。这种绝对理想的情况需要更改编码。否则,您将需要调用 SetFileApisToOEM 以获取用于控制台输出的数据,然后调用SetFileApisToANSI 得到同一文本(使用另一种编码)进行内部处理。另一种 SetFileApisToOEM 无法发挥作用的情况对命令行参数的处理:当您的应用程序的入口点为 main(而不是 wmain)时,参数始终作为 Windows ANSI 字符串数组进行传递。这一切显然使编写非 Unicode 控制台应用程序的程序员的工作变得更复杂了。

更为复杂的是为控制台编写的 8 位代码需要处理两种不同类型的区域设置。在编写代码时,您可以使用 Win32 API 或 C 运行时库函数。Win32 API 的 ANSI 函数假定文本是针对当前控制台代码页(系统区域设置默认定义的)编码的。SetConsoleCP 和 SetConsoleOutputCP 函数可更改这些操作中使用的代码页。用户可在命令提示符下调用 chcp or mode con cp select= 命令,这将会更改当前控制台的代码页。设置固定的控制台代码页的另一种方法是用默认的代码页集创建控制台快捷方式(仅适用于东亚本地化版本的操作系统)。 应用程序应能够响应用户的操作。

C 运行时库(CRT 函数)中区分区域设置函数可依照 (_w)setlocale 调用所定义的设置处理文本。如果代码中未调用 (_w)setlocale,则 CRT 函数对这些操作使用 ANSI "C" 语言不变区域设置,这样就丢失了特定于语言的功能。

该函数的声明为:

setlocale( int category, const char *locale)或

_wsetlocale( int category, const wchar_t *locale)其中 "category" 用于定义受影响的特定于区域的设置(如果指定了 LC_ALL,则全部定义)。可变区域设置可以是显式区域设置名称或下面的某一项:

".OCP" 指与当前用户区域设置对应的 OEM 代码页
".ACP" 或 "" 指与当前用户区域设置对应的 Windows 代码页
".OCP" 和 ".ACP" 参数始终引用用户区域设置(而不是系统区域设置)的设置值。因此不能将它们用于设置 LC_CTYPE。此 "category" 定义了 Unicode 向 8 位转换的规则和其他文本处理程序,必须遵循控制台的设置(可使用 GetConsoleCP 和 GetConsoleOutputCP 访问)。

对控制台应用程序最佳的长期解决方案是使用 Unicode,因为 Unicode 接口是针对 Win32 API 和 C 运行时库定义的。今后的编程模型仍需要您显式地设置区域设置,但至少可肯定通过 Win32 和 CRT 看到的文本不再需要进行代码转换。
posted @ 2012-11-03 11:09 jackdong 阅读(1256) | 评论 (0)编辑 收藏

http://www.csdn.net/article/2012-10-31/2811327-windows-phone-8-sdk

摘要:微软在近期举行的Build 2012开发者大会上,发布了Windows Phone 8 SDK 8.0,现已开放下载,最新SDK为App开发者提供了更多便捷服务,包括原生应用开发工具,手机版Windows Runtime以及新的内核。

Windows Phone 8发布之后,开发者最期待的就是Windows Phone 8 SDK,盼了几个月终于盼到,该SDK都有哪些新特性?对系统又有什么要求?本文将分两大部分(开发工具及功能&测试工具及功能)作详细解释。

开发工具及功能:

1)Visual Studio所包括的新特性:

  • Direct3D应用项目模板:若想了解更多模板信息,可查看《如何在一个模板中为Windows Phone创建新App》),若想了解更多Direct3D应用信息,可查看《Direct3D及游戏》。
  • 项目模板本地支持:现在的项目模板包括对本地化的内置支持,让你轻松使用最佳实例开发本地化App,省去大量配置步骤。想了解更多信息,请查看《如何为windows Phone开发本地化App
  • 调试管理:在Project Designer调试页面,你可以选择调试管理代码或者一款应用的本地代码部分,甚至能同时调试App及后端代理器。
  • XNA框架支持:不能开发新的XNA框架的App。更多信息,请查看《XNA框架及Windows Phone 8开发》。

2)Windows Phone 8模拟器所包括的新特性:

  • 支持多分辨率:(更多信息请看这里
  • Windows Phone 8模拟器的系统要求:Windows Phone 8模拟器运行于Windows Hyper-V上,所以与之有相同的硬件,软件及配置要求,但若你的电脑不支持Hyper-V,你仍然可以为Windows Phone开发App,亦可在Windows Phone 8设备设上调试并测试这些App。更多性信息请看这里
  • Windows Phone 8模拟器的网络要求:在Windows Phone OS 7.1模拟器中,使用的是开发电脑的网络连接,但Windows Phone 8模拟器配置本身就是网络中的一个独立设备,所以会有一些变化,更多信息看这里。)

3)Manifest设计:你现在可以在应用的Manifest文件中,通过用户友好型界面增加,移除并改变元素,更多信息可查看《如何修改Windows Phone的应用Manifest清单文件》。

4)独立资源存储管理器:有新的命令行选项,可以让你将目标设备特殊化。更多信息可查看《如何使用Windows Phone的独立资源存储器工具

测试工具及功能:

1)测试应用的本机图像:你可以自己事先测试应用程序的本机图像,自己体验过之后,找到不足之处进行修改,以便给用户带来更好的体验。更多信息可点击这里

2)应用的监测与分析:现在除了应用程序的分析以外,还增加了监测功能,能检测你应用的主要特点,并根据这些特点进行评分,以便你在开发App过程中确保应用的品质及性能。更多信息可查看《Windows Phone的App监测》。

3)仿真仪表盘:你可以在Windows Phone 8仪表盘中事先检查判断所开发的App在特殊情况下的反应,带来更好的用户体验,这里所指的情况包括:

  • 信号不好或者带宽不够的情况
  • 突然有手机提醒或者消息推送
  • 锁屏状态

更多信息,看这里

4)截屏:详情请查看《如何为Windows Phone Store创建截屏

Windows Phone SDK 8.0 系统要求:

  • 操作系统:Windows 8 64位客户端版本 
  • 硬件:4GB可用硬盘空间 ;4GB RAM ;64位CPU 
  • Windows Phone 8 模拟器要求:Windows 8 Pro 版本或更高版本 ;要求支持二级地址转换 (SLAT) 的处理器 

总结

总体来讲,WP SDK 8.0为App开发者提供了更多便捷服务,包括原生应用开发工具,手机版Windows Runtime以及新的内核。Windows Phone SDK 8.0 可用于构建WP 8.0和WP 7.5的应用及游戏,将提供一个适用于Windows Phone的独立Visual Studio Express 2012版本作为Visual Studio 2012 Prefessional Premium或Ultimate版本的外接程序进行工作。利用SDK,开发者可以使用已有的代码来构建或托管本机代码应用,另外还包括在特殊情况下用户分析和测试Windows Phone应用的多个模拟器和其它工具,这里进入下载

注意:开发中心的注册时间到11月7日截止,大家千万注意不要错过时间,另外账号注册费用只需要$8,这比之前的$99便宜了许多。

(文章编译:陈徐天九 责任编辑:张宁)

文章来源:msdn

本文为CSDN编译整理,未经允许不得转载。如需转载请联系market@csdn.net。

posted @ 2012-11-01 12:33 jackdong 阅读(367) | 评论 (0)编辑 收藏

http://www.cnblogs.com/giraffe/archive/2011/10/21/CUDA-Ubuntu-Install.html

1:下载CUDA 4.0

安装官网最新的显卡驱动:

安装方法可以参考:

《Ubuntu11.04下安装Nvidia显卡驱动的方法》

然后从NVIDIA网站(http://developer.nvidia.com/cuda-downloads)下载

CUDA Toolkit for Ubuntu Linux 10.10;

GPU Computing SDK;

CUDA Tools SDK。

 

2:安装CUDA Toolkit for Ubuntu Linux 10.10

由于在ubuntu11.04下无法正常的用sh命令进行安装,所以需要用以下命令进行安装:

chmod +x cudatoolkit_4.0.17_linux_32_ubuntu10.10.run  
sudo ./cudatoolkit_4.0.17_linux_32_ubuntu10.10.run

注意上面工具包的名称要跟你下载的工具包名称一致,不同系统版本的文件名略有差别。

预设是安装在/usr/local/cuda 目录下,建议就依照他的预设路径安装。

安装完成后要设定Library 的Path,有两个方式:

(1)一种是更改LD_LIBRARY_PATH 环境变数:

在用户名的目录下开.bashrc文件,可以通过vi命令或者gedit命令进行编辑,我更喜欢后者,在末尾处加入两行命令:

gedit ~/.bashrc
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH

如果是64位系统的话需要将上一行的lib改为lib64,然后保存。

 

(2)另一种方法是直接加在/etc/ld.so.conf.d/ 里面:

sudo echo "/usr/local/cuda/lib" >> /etc/ld.so.conf.d/cuda-40.conf
sudo ldconfig

如果是64位系统同样将lib改为lib64

再设定PATH:  

echo 'export PATH=$PATH:/usr/local/cuda/bin' >> ~/.bashrc

 

3:安装CUDA Tools SDK:
chmod +x cudatools_4.0.17_linux_32.run  
sudo ./cudatools_4.0.17_linux_32.run

预设是安装在/usr/local/cuda/CUDAToolsSDK 目录下。

 

4:安装GPU Computing SDK:
chmod +x gpucomputingsdk_4.0.17_linux.run  
./gpucomputingsdk_4.0.17_linux.run

预设是安装在自己帐号的~/NVIDIA_GPU_Computing_SDK 目录下,安装时要设置CUDA 安装的路径: Enter CUDA install path (default /usr/local/cuda):

若CUDA 都是依照预设路径安装,则这里就不需要更动。

 

5:设定GCC编译器  

CUDA 4.0 目前只支援到gcc 4.4,若是只有装gcc 4.5 的话,还要再装一下gcc 4.4 才能编译: 

sudo apt-get install gcc-4.4 g++-4.4 

接着要让编译时能够使用gcc 4.4,一种方式是将系统的/usr/bin/gcc 改连到/usr/bin/gcc-4.4,/usr/bin/g++ 也一样改连到/usr/bin/ g++-4.4,或是使用update-alternative:  

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 150  
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 150
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100

接着使用update-alternatives 选择4.4 版的gcc:  

sudo update-alternatives --config gcc  

执行后选择gcc-4.4,再接着选择4.4 版的g++:  

sudo update-alternatives --config g++  

执行后选择g++-4.4  

若不想修改整个系统的设定,有另一个办法可以处理,自己建一个~/bin 目录,然后建立gcc-4.4 与g++-4.4 的连结,再将这个路径加入自己的PATH 中,这样就不会影响其他的程式:

mkdir ~/bin  
ln -s /usr/bin/gcc-4.4 ~/bin/gcc
ln -s /usr/bin/g++-4.4 ~/bin/g++

然后在每次要编译CUDA 程式前执行: 

export PATH=~/bin:$PATH  

这样就不需要更动到系统其他程式的设定了。  

 

6:编译GPU Computing SDK code samples  
cd ~/NVIDIA_GPU_Computing_SDK 
make

若是幸运的话,这样就大公告成了,但通常都会有些问题,像编译时若是出现类似这样的问题:  

/usr/bin/ld: cannot find -lXi  
/usr/bin/ld: cannot find -lXmu
/usr/bin/ld: cannot find -lglut
collect2: ld returned 1 exit status

是表示有一些必要的Library 没装,用apt-cache 找一下再用apt-get 装起来就可以了:  

apt-get install libxi-dev libxmu-dev libglut3-dev  

我安装的时候就出现了

/usr/bin/ld: cannot find -lGL  
collect2: ld returned 1 exit status

这其实是因为没有链接到正确的libGL的库,这时候执行以下命令

sudo -i
cd /usr/lib/
ls -al |grep libGL.so.*

执行完上述命令后,会看见有一个与你按装的驱动程序相类似的编号呃so,如我的驱动程序版本是280.13就会有一个

libGL.so.280.13的文件,然后执行以下命令。当然,这个需要root权限

rm libGL.so
ln -s libGL.so.280.13 libGL.so

 

安装完成之后就要检验一下CUDA安装是否成功

进入~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release目录下看看是不是有很多可执行文件

注意deviceQuery这个可执行文件,我们就是要执行它来判断自己的CUDA是否安装成功,输入./deviceQuery命令来执行它,如果出现你的显卡信息则说明CUDA已经安装成功。

posted @ 2012-10-31 09:03 jackdong 阅读(534) | 评论 (0)编辑 收藏

http://www.cnblogs.com/giraffe/archive/2011/10/21/Ubuntu11-nvidiaDriver.html

lz的显卡是GeForce GTX 460SE。而本人是一个灰常灰常的新手,结合网上的教程和自已屡试屡败的经验终于把显卡驱动安装成功了
我安装总是出现下列错误:
ERROR: The Nouveau kernel driver is currently in use by your system. This
driver is incompatible with the NVIDIA driver, and must be disabled
before proceeding. Please consult the NVIDIA driver README and your
Linux distribution's documentation for details on how to correctly
disable the Nouveau kernel driver.

看到好多教程都是修改已有的blacklist.conf,来解决此问题,但我修改以后出现了Ctrl + Alt +F1进入不了第一控制台,然后找nvidia的官方说明,写的是建立一个新的disable-nouveau.conf然后配置, 贴出来好方便大家参考:

具体步聚:
1.去官方下载最新版的nVidia驱动,现最新版本是Nvidia-Linux-x86-280.13.run

http://www.nvidia.cn/Download/index.aspx?lang=cn


2.删除之前所安装的nVidia驱动(没安的略去这一步)

sudo apt-get --purge remove nvidia-*

3.建立并修改disable-nouveau.conf

sudo gedit /etc/modprobe.d/disable-nouveau.conf

在里面填入两行内容:

 blacklist nouveau
options nouveau modeset=0

然后重启电脑,重启之后你会发现画面质量明显降低,证明代码生效了。


4.按Ctrl + Alt +F1到第一控制台,输入用户名,密码登陆后执行:

sudo /etc/init.d/gdm stop

 这是因为Nvidia官方驱动不能运行在X-server下,所以要关闭GUI。


5.进入驱动所在文件夹,安装驱动

sudo sh NVIDIA-Linux-x86-280.13.run

注意区分大小写,安装过程中出现更新,选择NO,安装完毕,然后配置Xconfig:

sudo nvidia-xconfig

  

6.配置好之后,重启图形界面,Ok~

sudo /etc/init.d/gdm restart
posted @ 2012-10-31 09:03 jackdong 阅读(353) | 评论 (0)编辑 收藏

http://blog.csdn.net/lanzhengpeng2/article/details/2947262

最近在写64位汇编,设置编译命令是件繁琐而又重复的劳动。网上也有不少文章介绍怎么样编译64位汇编的,但都觉得复杂,有的还需要下载其他的汇编软件,最囧的是:有篇文章给出的下载地址下载下来的文件干脆就直接是木马!

既然我们使用VS系列,就不要舍近求远了。使用MS提供的ml64,安全放心,也无兼容性问题。下面开始说明怎么样设置:

一、在vc的安装目录下,找到“VCProjectDefaults/masm.rules”,复制出来,改个名字,用记事本等纯文本编辑器打开

二、masm.rules的前面几行的内容如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <VisualStudioToolFile
  3.     Name="Microsoft Macro Assembler"
  4.     Version="8.00"
  5.     >
  6.     <Rules>
  7.         <CustomBuildRule
  8.             Name="MASM"
  9.             DisplayName="Microsoft Macro Assembler"
  10.             CommandLine="ml.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"
  11.             Outputs="[$ObjectFileName]"
  12.             FileExtensions="*.asm"
  13.             ExecutionDescription="Assembling..."
  14.             >

替换ml.exe为ml64.exe,然后把名称,扩展名修改成你喜欢的,下面是我的修改:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <VisualStudioToolFile
  3.     Name="Macro Assembler x64"
  4.     Version="8.00"
  5.     >
  6.     <Rules>
  7.         <CustomBuildRule
  8.             Name="MASM x64"
  9.             DisplayName="Macro Assembler x64"
  10.             CommandLine="ml64.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"
  11.             Outputs="[$ObjectFileName]"
  12.             FileExtensions="*.asm64"
  13.             ExecutionDescription="Assembling..."
  14.             >

保存,关闭文件。

三、在解决方案资源管理器里,右键点中你的项目,出来一个菜单;选择“自定义生成规则...”,在弹出的对话框上,点“查找现有的...”,打开你刚才编辑的.rules文件。然后你就应该在“可用的规则文件”列表里看到你刚才修改的名字和扩展名(我的叫做asm64),在其左边的检查框里勾上,关闭这个窗口。

四、新建一个文本文件,改名成“文件名称.你喜欢的扩展名”,如我的就叫做“1.asm64”,然后把这个文件加入到工程里。不出意外,VS就自动根据扩展名选择了你刚才修改的规则;如果出了意外,则单独对“1.asm64”进行设置:在解决方案资源管理器里,右键点中这个文件,选择属性;然后在对话框里左边选择“配制属性/常规”,然后在工具里选择你刚才命名的规则。如我的叫做“Macro Assembler x64”。点“确认”按钮关闭这个对话框。

五、在“1.asm64”文件里写上正确的汇编,编译之。不出意外,64位汇编已经正确连接到你的程序里了。

六、打开“1.asm64”文件的属性对话框,应该能看到不少设置选项,慢慢琢磨吧。

 

show一段64位汇编代码:

 

  1. INCLUDE listing.inc
  2. pdata   SEGMENT
  3. ___real_value_1 DD 03f800000r
  4.     DD  03f800000r
  5.     DD  03f800000r
  6.     DD  03f800000r
  7. ___real_value_negation DD 080000000H
  8.     DD  080000000H
  9.     DD  080000000H
  10.     DD  080000000H
  11. pdata   ENDS
  12. ;void MulAdd(D3DMATRIX & Out,const D3DMATRIX & m1,FLOAT f,const D3DMATRIX & m2)
  13. ;{
  14. ;   register FLOAT * pOut = (FLOAT *)&Out;
  15. ;   register const FLOAT * pIn1 = (FLOAT *)&m1;
  16. ;   register const FLOAT * pIn2 = (FLOAT *)&m2;
  17. ;   for(register int i=15;i>=0;--i)
  18. ;       pOut[i] = pIn1[i] * f + pIn2[i];
  19. ;}
  20. PUBLIC ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z
  21. _TEXT   SEGMENT
  22. ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z  PROC
  23.     shufps xmm2,xmm2,0
  24.     
  25.     movups xmm0,[rdx]
  26.     movups xmm1,[r9]
  27.     mulps xmm0,xmm2
  28.     addps xmm0,xmm1
  29.     movups [rcx],xmm0
  30.     
  31.     movups xmm0,[rdx+16]
  32.     movups xmm1,[r9+16]
  33.     mulps xmm0,xmm2
  34.     addps xmm0,xmm1
  35.     movups [rcx+16],xmm0
  36.     movups xmm0,[rdx+32]
  37.     movups xmm1,[r9+32]
  38.     mulps xmm0,xmm2
  39.     addps xmm0,xmm1
  40.     movups [rcx+32],xmm0
  41.     movups xmm0,[rdx+48]
  42.     movups xmm1,[r9+48]
  43.     mulps xmm0,xmm2
  44.     addps xmm0,xmm1
  45.     movups [rcx+48],xmm0
  46.     
  47.     ret 0
  48.     
  49. ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z  ENDP
  50. _TEXT   ENDS

祝各位同仁_WIN64旅程愉快!

posted @ 2012-10-30 11:13 jackdong 阅读(775) | 评论 (0)编辑 收藏

http://www.cnblogs.com/linzheng/archive/2012/07/29/2614014.html

     在C++/CX里面是使用Platform::String类来表示字符串的类型,在windows运行时的接口和方法中,需要使用Platform::String来作为字符串参数的传递。如果需要使用标准C++的字符串类型如wstring或者string的时候,可以将Platform::String与标准的C++的字符串进行互相的转换。

 

String类型的构造

String类型表示的是char16的字符串,可以直接通过字符串的赋值来进行构造也可以使用标准C++的wchar_t*指针进行构造。

// Initializing a String^ by using string literals
    String^ str1 = "Test"// ok for ANSI text. uses current code page
    String^ str2("Test");
    String
^ str3 = L"Test";
    String
^ str4(L"Test");


    
//Initialize a String^ by using another String^

    String
^ str6(str1);
    auto str7 
= str2;

    
// Initialize a String from wchar_t* and wstring
    wchar_t msg[] = L"Test";
    String
^ str8 = ref new String(msg);
    std::wstring wstr1(L
"Test");
    String
^ str9 = ref new String(wstr1.c_str());
    String
^ str10 = ref new String(wstr1.c_str(), wstr1.length());

 

字符的操作

 String提供了相关的方法来操作字符串,其中可以使用String::Data()方法来返回一个String^ 对象的wchar_t*指针。

 

// Concatenation 
    auto str1 = "Hello" + " World";
    auto str2 
= str1 + " from C++/CX!";    
    auto str3 
= String::Concat(str2, " and the String class");
    
    
// Comparison
    if (str1 == str2) /*  */ }
    
if (str1->Equals(str2)) /*  */ }
    
if (str1 != str2) /*  */ }
    
if (str1 < str2 || str1 > str2) /*  */};
    
int result = String::CompareOrdinal(str1, str2);
    
    
if(str1 == nullptr) /* */};
    
if(str1->IsEmpty()) /* */};

   
// Accessing individual characters in a String^
    auto it = str1->Begin();
    char16 ch 
= it[0];

 

String类型的转换

String类型可以和标准C++的wstring进行互相的转换

 

// compile with: /ZW
#include <string>

using namespace std;
using namespace Platform;

int main( array<String^>^ args ) 
{
    
// Create a String^ variable statically or dynamically from a 

literal 
string
    String
^ str1 = "AAAAAAAA";
    
    
// Use the value of str1 to create the ws1 wstring variable.
    wstring ws1( str1->Data() ); 
    
// The value of ws1 is L"AAAAAAAA".

    
// Manipulate the wstring value.
    wstring replacement( L"BBB" );
    ws1 
= ws1.replace ( 13, replacement );
    
// The value of ws1 is L"ABBBAAAA".

    
// Assign the modified wstring back to str1. 
    str1 = ref new String( ws1.c_str() ); 

    
return 0;
}


posted @ 2012-10-29 21:51 jackdong 阅读(389) | 评论 (0)编辑 收藏

http://www.cnblogs.com/linzheng/archive/2012/07/07/2580848.html

Windows运行时组件是Windows 8里面通用的公共库,它可以使用C++,C#或者VB来编写,不过你的Windows 8 metro是用什么语言编写都可以调用无缝地调用Windows运行时组件。

下面通过一个C#编写的Windows 8项目来调用一个用C++编写的Windows运行时组件。

创建一个Windows运行时组件:

编写如下的代码:

#include "pch.h"
#include 
"WinRTComponent.h"

using namespace CppWinRTComponentDll2;

int CalculatorSample::Add(int x, int y)
{
    
return x+y;
}

头文件

#pragma once

using namespace Windows::Foundation;

namespace CppWinRTComponentDll2
{

    
public ref class CalculatorSample sealed
    
{
    
public:
        
int Add(int x, int y);

    }
;
}

 

在C#编写的项目中调用Windows运行时组件的C++方法

添加Windows运行时组件

UI部分

 

<Page
    
x:Class="TestWinRTCSDemo.MainPage"
    IsTabStop
="false"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local
="using:TestWinRTCSDemo"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable
="d">

    
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        
<StackPanel>
            
<TextBox x:Name="txtX" HorizontalAlignment="Center" Height="45" Width="258"></TextBox>
            
<TextBlock   Text="+" HorizontalAlignment="Center"  Height="45" Width="258" FontSize="14" FontWeight="Bold"/>
            
<TextBox x:Name="txtY" HorizontalAlignment="Center" Height="45" Width="258"></TextBox>
            
<Button Content="调用WinRT方法来相加" HorizontalAlignment="Center" Click="Button_Click_1" ></Button>
            
<TextBox x:Name="txtAddResult" HorizontalAlignment="Center" Height="45" Width="258"/>
        
</StackPanel>
    
</Grid>
</Page>

C#代码部分

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using CppWinRTComponentDll2;//引入Windows运行时的空间

namespace TestWinRTCSDemo
{

    
public sealed partial class MainPage : Page
    
{
        
public MainPage()
        
{
            
this.InitializeComponent();
        }


        
protected override void OnNavigatedTo(NavigationEventArgs e)
        
{
        }


        
private void Button_Click_1(object sender, RoutedEventArgs e)
        
{
            
if (txtX.Text != "" && txtY.Text != "")
            
{
                 CalculatorSample calcobj 
=  new  CalculatorSample();//直接创建Windows运行时里面的对象,很方便
                 int x = Convert.ToInt32(txtX.Text.ToString());
                 
int y = Convert.ToInt32(txtY.Text.ToString());
                 txtAddResult.Text 
= calcobj.Add(x,y).ToString();//调用Windows运行时里面的方法
            }

        }

    }

}

 

运行的效果


 


posted @ 2012-10-29 21:48 jackdong 阅读(470) | 评论 (0)编辑 收藏

     摘要:       http://www.cnblogs.com/linzheng/archive/2012/07/03/2574039.html      在Windows 8里面很多API都封装成了异步的形式,因此异步编程成为了Windows 8的一大特色,同时也给Windows 8的应用更好的用户体验...  阅读全文
posted @ 2012-10-29 21:45 jackdong 阅读(474) | 评论 (0)编辑 收藏

仅列出标题
共10页: 1 2 3 4 5 6 7 8 9 Last