在win32 api程序中:使用C++风格的字符串

转载 2006年06月15日 11:31:00

        初学win32 api程序设计的人,通常对于C语言的字符串和数字转换感到比较头痛。尤其像我这样只学过C++,却不谙C语言的标准库的人,使用起char*和atoi()来实在是如履薄冰

所以我总琢磨着在api程序里用上C++标准库里的string。经过一番折腾发现还是可以的。

以下进入正题:

首先我们知道windows为了解决unicode的问题,定义了一个TCHAR的typedef,会根据是否使用unicode来定义成char 或者 wchar_t。所以如果我们直接使用STL预定义的string类型的话就会有问题,因为string里保存的是char。

所以我们必须使用以下形式来定义一个用于api程序的字符串:

basic_string<TCHAR> str;
这样str里保存的字符也会根据unicode的定义与否而变为相应的char或wchar_t。

我们来看一个在TextOut中使用的例子:

TextOut(hWnd,0,0,str.c_str(),str.length());

因为TextOut函数还是需要一个TCHAR* 类型的参数,所以我们要调用str的c_str()成员函数来获得一个C风格的字符串。

使用basic_string的最大好处是你可以任意拷贝、合并、截取字符串而不需要使用strcpy之类函数的unicode兼容性问题。

另外一个重大的好处是我们还可以从而抛弃atoi(),而转投C++风格的数字->字符串 转换,不过现在来不及了 下回再讲

Win32字符串处理函数

函数名 功能 lstrlen 返回给定字符串的长度(ANSI版本或Unicode版本),不包含null终结符 lstrcpy ...
  • Qsir
  • Qsir
  • 2017-11-20 17:22:48
  • 447

Win32中的字符串处理

使用一些高级的API,而不是使用cmpsb等汇编指令了。这些API大都在include     Shlwapi.inc里例如:在一个字符串中查找另一个字符串原型:extern char *strst...
  • jiutao_tang
  • jiutao_tang
  • 2011-02-19 20:51:00
  • 1808

C++字符串完全指引之一 —— Win32 字符编码

注:译文来源:http://www.vckbase.com/document/viewdoc/?id=1082 原著:Michael Dunn 翻译:Chengjie Sun 原文出处:...
  • mostone
  • mostone
  • 2012-03-27 07:52:52
  • 1076

面向对象的Windows编程实战(上)(使用C++和Win32 API)

写这一篇文章的目的就是使用C++这个面向对象的语言,使用大家都很熟悉的Win32 API,在windows平台上开发Windows程序,这也是我很久以前就有的想法了.参考了一些外国网站我封装了下面几个...
  • huyoo
  • huyoo
  • 2004-10-13 17:29:00
  • 5514

Win32 API 封装类总结

以下是一些封装的Win32 API类;备用; 重温WIN32 API ------ 最简单的Windows窗口封装类 http://blog.csdn.net/smstong/arti...
  • bcbobo21cn
  • bcbobo21cn
  • 2016-08-16 10:56:00
  • 4422

win32控制台程序中,使用MFC的方法

1.在项目属性->配置属性->常规->MFC的使用,选择"在共享DLL中使用MFC" 2.////Note:用于隐藏掉console框     #pragma comment(linker, ...
  • android_lover2014
  • android_lover2014
  • 2016-10-08 13:46:11
  • 1186

Jawin –Java/Win32互动项目:可调用DLL及COM的调用项目

  Jawin –Java/Win32互动项目:可调用DLL及COM的调用项目注:原来有一个项目,我一直在找一个像这样的东西,可以用于读取COM或者是DLL,可是不知道为什么在2005年后就没有更新了...
  • fenglibing
  • fenglibing
  • 2007-08-16 22:25:00
  • 12051

Windows编程 Win32API中常见的数据类型

Win32API有一套和C\C++基本数据类型不同的数据类型. C\C++语言的数据类型有如下几个缺陷: 数据类型平台相关,在不同平台上,同一个数据类型可能占用不同的空间大小。典型的,在16位系...
  • RitMan
  • RitMan
  • 2015-12-31 15:20:28
  • 2698

在.net平台中调用WIN32api函数

.NET平台中的dll都是具有“自描述性”,里面具有哪些函数都已经写进它自己的metadata里了,因此不需要再来一个.h头文件。.NET平台上的C#语言来调用Win32平台上的dll文件需要用到Dl...
  • cz19800823
  • cz19800823
  • 2013-09-04 12:31:18
  • 989

win32控制台程序中使用CString和string .

最近编一个控制台程序,开始时用字符数组,发现处理字符串很不方便.于是想到用MFC的CString类.CString的头文件是.包含头文件编译,提示错误fatal error C1189: #error...
  • zdhlwt2008
  • zdhlwt2008
  • 2015-09-06 16:04:02
  • 2509
收藏助手
不良信息举报
您举报文章:在win32 api程序中:使用C++风格的字符串
举报原因:
原因补充:

(最多只允许输入30个字)