codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。"> CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:asp" target="_blank">codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。_IT技术专题(vc中的CString的操作 )
    当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:asp" target="_blank">codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。
 

 

    摘要:vc中利用ado共同实现数据库的操作    ado是应用层的编程接口,它通过ole db提供的com接口访问数据,它适合于各种客户机/服务器应用系统和基于web的应用,尤其在一些脚本语言中访问数据库操作是ado的主要优势。ado 是一套用自动化技术建立起来的对象层次结构,它比其他的一些对象模型如dao(data access object)、rdo(remote data obje......
 ·vc下利用ado连接access数据库     »显示摘要«
    摘要:#include <iostream.h>#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("eof", "adoeof") int main(){ //使用ado连接数据库... //------------......


vc中的CString的操作
cstring 操作指南原著:joseph m. newcomer翻译:littleloach

cstring 对象的连接 【程序编程相关:CBitmapButton的使用

原文出处:asp" target="_blank">codeproject:cstring management通过阅读本文你可以学习如何有效地使用 cstring.  cstring 是一种很有用的数据类型.它们很大程度上简化了mfc中的许多操作,使得mfc在做字符串操作的时候方便了很多.不管怎样,使用cstring有很多特殊的技巧,特别是对于纯c背景下走出来的程序员来说有点难以学习.这篇文章就来讨论这些技巧.  使用cstring可以让你对字符串的操作更加直截了当.这篇文章不是cstring的完全手册,但囊括了大部分常见基本问题.这篇文章包括以下内容: 【推荐阅读:vc下使用windows的性能计数器简介

cstring gray("gray"); cstring cat("cat"); cstring graycat = gray + cat;

要比用下面的方法好得多: 【扩展信息:visual c++键盘快捷键大全

字符串">格式化字符串(包括 int 型转化为 cstring ) cstring 型转化成 int 型 cstring 型与 char* 类型的相互转化char* 转化成 cstring cstring 转化成 char* 之一:使用lpctstr强制转化 cstring 转化成 char* 之二:使用cstring对象的getbuffer方法 cstring 转化成 char* 之三: 与控件的接口cstring 型转化成 bstr 型; bstr 型转化成 cstring 型; variant 型转化成 cstring 型; 字符串表资源">载入字符串表资源; cstring 与临时对象; cstring 的效率; 总结

下面我分别讨论. 1.cstring 对象的连接  能体现出 cstring 类型方便性特点的一个方面就字符串的连接,使用 cstring 类型,你能很方便地连接两个字符串,正如下面的例子:

char gray[] = "gray"; char cat[] = "cat"; char * graycat = malloc(strlen(gray) + strlen(cat) + 1); strcpy(graycat, gray); strcat(graycat, cat);

2.字符串">格式化字符串  与其用 sprintf() 函数或 wsprintf() 函数来格式化一个字符串,还不如用 cstring 对象的format()方法:

cstring s; s.format(_t("the total is %d"), total);

  用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由cstring类替你完成.  格式化是一种把其它不是字符串类型的数据转化为cstring类型的最常用技巧,比如,把一个整数转化成cstring类型,可用如下方法:

cstring s; s.format(_t("%d"), total);

  我总是对我的字符串使用_t()宏,这是为了让我的代码至少有unicode的意识,当然,关于unicode的话题不在这篇文章的讨论范围._t()宏在8位字符环境下是如下定义的:

#define _t(x) x // 非unicode版本(non-unicode version)

而在unicode环境下是如下定义的:

#define _t(x) l##x // unicode版本(unicode version)

所以在unicode环境下,它的效果就相当于:

s.format(l"%d", total);

  如果你认为你的程序可能在unicode的环境下运行,那么开始在意用 unicode 编码.比如说,不要用 sizeof() 操作符来获得字符串的长度,因为在unicode环境下就会有2倍的误差.我们可以用一些方法来隐藏unicode的一些细节,比如在我需要获得字符长度的时候,我会用一个叫做dim的宏,这个宏是在我的dim.h文件中定义的,我会在我写的所有程序中都包含这个文件:

#define dim(x) ( sizeof((x)) / sizeof((x)[0]) )  这个宏不仅可以用来解决unicode的字符串长度的问题,也可以用在编译时定义的表格上,它可以获得表格的项数,如下:class whatever { ... }; whatever data[] = { { ... }, ... { ... }, }; for(int i = 0; i < dim(data); i++) // 扫描表格寻找匹配项.   这里要提醒你的就是一定要注意那些在参数中需要真实字节数的api函数调用,如果你传递字符个数给它,它将不能正常工作.如下:tchar data[20]; lstrcpyn(data, longstring, sizeof(data) - 1); // wrong! lstrcpyn(data, longstring, dim(data) - 1); // right writefile(f, data, dim(data), &byteswritten, null); // wrong! writefile(f, data, sizeof(data), &byteswritten, null); // right

造成以上原因是因为lstrcpyn需要一个字符个数作为参数,但是writefile却需要字节数作为参数.同样需要注意的是有时候需要写出数据的所有内容.如果你仅仅只想写出数据的真实长度,你可能会认为你应该这样做:

writefile(f, data, lstrlen(data), &byteswritten, null); // wrong

但是在unicode环境下,它不会正常工作.正确的做法应该是这样:

writefile(f, data, lstrlen(data) * sizeof(tchar), &byteswritten, null); // right

  因为writefile需要的是一个以字节为单位的长度.(可能有些人会想“在非unicode的环境下运行这行代码,就意味着总是在做一个多余的乘1操作,这样不会降低程序的效率吗?”这种想法是多余的,你必须要了解编译器实际上做了什么,没有哪一个c或c++编译器会把这种无聊的乘1操作留在代码中.在unicode环境下运行的时候,你也不必担心那个乘2操作会降低程序的效率,记住,这只是一个左移一位的操作而已,编译器也很乐意为你做这种替换.
...   下一页

    摘要: 终于使用microsoft enhanced cryptographic provider v1.0 实现了公钥加密和解密,但safesign csp version 1.0不能,不知为什么,有高手能解答吗?另外dwbuflen 怎样计算才好,我取100,出编号234错,便取了200。以下程序在vs2003下调试成功#include "stdafx.h"#include &l......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE