用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
bluejoe2000的公告
<b>作品推荐</b><br><a href="http://www.china-pub.com/195701" target="_blank"><img src="http://book.vcer.net/images/vcmap-s.gif"><br>点击查看详细信息</a><br><br> <a href="http://www.china-pub.com/37426" target="_blank"><img src="http://book.vcer.net/images/stdcpp-s.gif"><br>点击查看详细信息</a><br><br> <b>博文推荐</b><br><a href="http://blog.csdn.net/bluejoe2000/archive/2009/06/27/4302966.aspx" target="_blank">● 程序员的路该怎么走?</a><br> <a href="http://blog.csdn.net/bluejoe2000/archive/2009/06/30/4308820.aspx" target="_blank">● 在公司里,你会是什么样的程序员?</a><br> <a href="http://blog.csdn.net/bluejoe2000/archive/2009/07/24/4375593.aspx" target="_blank">● 备受争议的Visual C++</a><br> <a href="http://blog.csdn.net/bluejoe2000/archive/2009/07/29/4389262.aspx" target="_blank">● 主考官不是上帝</a><br> <a href="http://blog.csdn.net/bluejoe2000/archive/2009/06/15/4269540.aspx" target="_blank">● VC之美化界面篇</a>
文章分类
白乔的朋友们
● VC程序员家园
● 白乔老师课堂
白乔作品链接
● 《把脉VC++》
● 《标准C++开发入门与编程实践》
存档
2009年09月15日

转载 WinSxS技术


今天,我这里处理了一个WinSxS版本混乱导致的应用程序无法加载的问题。
环境如下:有一个EXE文件,不依赖任何的运行库 有很多DLL文件,分别在EXE文件目录的子目录下 EXE文件所在目录下有一套安装的VC8运行库 DLL文件需要依赖VC8运行库 因为各种原因,没有使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面
使用的时候发现,EXE文件加载DLL的时候,总是提示加载失败。DLL无法启动。我用 Process Monitor 监视了一下文件的读写操作,发现EXE文件在加载DLL的时候,CSRSS总是去读取 Windows\WinSxS 目录下的运行库文件,由于没有使用 vcredist_x86.exe 把VC8运行库安装到Windows\WinSxS目录下面,因此DLL加载失败了。
我很奇怪的问题是,为什么总是忽略了EXE目录下的manifest文件,而总是使用 Windows\WinSxS 目录下的文件呢?
以前知道manifest文件可以外置,也可以内置到PE文件的资源里面,难阅读全文>

发表于 @ 2009年09月15日 16:07:00 | 评论( loading... ) | 编辑| 举报| 收藏

转载 VC2005之远程调试

[转自:http://blog.csdn.net/AZHANG00000/archive/2009/03/03/3951677.aspx ]VC之远程调试远程调试的基本就两个步骤:1. 拷贝调试监控器到远程机器2. 远程机器开启调试监控3. 本机设定调试目标4. 像本地调试一样调试远程机器1. 拷贝监控器由于远程机器没有安装VC,所以没有调试监控器可用。我们可以从本机的VC安装目录下拷贝一个监控器到远程机器。下面是个例子:假设使用的是VC2005调试32位程序。首先在本机VC安装目录下找到调试监控器目录(你的目录可能会有不同):D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger\x86然后把该目录下所有文件拷贝至远程机器任意位置,假设为:D:\remote_debug_test\vc_remote_debug_monitor阅读全文>

发表于 @ 2009年09月15日 13:07:00 | 评论( loading... ) | 编辑| 举报| 收藏

2009年09月01日

原创  VC中文件操作的几种方式(3,4)


6.1.3  使用Windows API
Windows API总是显得格外沉重,表6-5是常用的文件读写操作API。
表6-5  文件读写API
函数
含义
CreateFile
创建、打开文件,返回文件句柄
CloseHandle
关闭文件句柄
ReadFile
从文件读取数据
WriteFile
向文件写入数据
SetFilePointer
设置文件读写指针
LockFile
锁定文件
UnlockFile
解锁文件
在Windows中,文件操作总是针对一个文件句柄进行的,如:HANDLE WINAPI CreateFile(    __in          LPCTSTR lpFileName,    __in          DWORD dwDesiredAccess,    __in          DWORD dwShareMode,    __in         阅读全文>

发表于 @ 2009年09月01日 08:53:00 | 评论( loading... ) | 编辑| 举报| 收藏

2009年08月30日

原创 WTL

简介  WTL 在开发者之间的悄悄传播已经超过一年了, 传闻它是基于ATL的,并在微软内部使用.这理所当然的引起了ATL开发者社区的主意.这些人从ATL1.1开始,就一直为ATL控件书写UI代码,但是他们发现,他们的所写的代码常常就是纯的Win32 GDI代码.我告诉您, WTL并没有多大不同.  是不是让人失望? 不,因为ATL只是对COM进行了简单的封装,这也是ATL的强大之处. 是的,写ATL您必须通晓COM. 您在ATL上额外花费的功夫跟您学习COM所作的努力比起来,简直微不足道.这跟那些需要把主要精力花费在学习类库本身,忽略COM的库是完全不同的.  WTL与此类似.您需要懂得Win32窗口技术和GDI.只要您懂得,学习WTL就似清风抚面,再简单不过了.如果您不懂 这些,那么您最好使用VB来写UI代码.WTL有什么?  它给各种类型的应用程序提供了一个基本的框架.注意,虽然您没有MFC那样的文档/视结构,但是您有视(views). 在WTL有大量的代码让您来管理视,而且加入您自己的代码也很容易. WTL有阅读全文>

发表于 @ 2009年08月30日 18:03:00 | 评论( loading... ) | 编辑| 举报| 收藏

2009年08月28日

原创 VC中文件操作的几种方式(1,2)


第6章  使用文件存取对象
文件可以用来存储一张《清明上河图》,一曲《春江花月夜》,当然也可以存储一部《红楼梦》,文件的内容依赖于应用程序来解释。几乎所有的操作系统都通过文件的界面允许用户保存、管理数据。所以,我们理所当然把文件当做数据存取介质的第一选择。
6.1  文件操作的几种方式
操作计算机的人都会接触到文件,文件的操作通常包括文件的读取、修改,有的时候我们还需要对文件进行外部管理,包括文件复制、删除及属性设置等。
6.1.1  使用CRT函数std::fxxx()
文件操作可以采用C语言运行时期库来完成,CRT提供的fxxx()函数如表6-1所示。
表6-1  CRT文件操作函数
函数
含义
fopen
打开指定文件名的文件
fread
从文件中读取指定长度的数据
fwrite
向文件中写入指定的数据
fclose
关闭文件
feof
判断是否达到文件结尾
fgetc
阅读全文>

发表于 @ 2009年08月28日 10:06:00 | 评论( loading... ) | 编辑| 举报| 收藏

2009年08月19日

原创 万能转换器boost::lexical_cast

boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下:string s = "123"; int a = lexical_cast(s); 这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直接使用boost:: lexical_cast。如果转换发生了意外,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉。阅读全文>

发表于 @ 2009年08月19日 08:29:00 | 评论( loading... ) | 编辑| 举报| 收藏

原创 ANSI、MBCS与UNICODE

目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。ASCII码适用于所有拉丁文字,它用7位二进制数进行编码(其最高位(bit7)被用做奇偶校验位),可以表示128个字符。第0~32号及第127号(共34个)是控制字符或通信专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等。第33~126号(共94个)是字符,其中第48~57号为0~9 10个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。ASCII码占用一个字节,准确地说,是7个比特。由于汉字出现在ASCII码之后,所以汉字的编码必须兼容ASCII码。还有一个问题就是,汉字的数目很多,用简单的1个字节根本无法表达(1个字节,撑死了只能表示256个字符,阅读全文>

发表于 @ 2009年08月19日 08:22:00 | 评论( loading... ) | 编辑| 举报| 收藏

2009年08月10日

原创 何为POD对象?


在C++中,我们把传统的C风格的struct叫做POD(Plain Old Data)对象。一般来说,POD对象应该满足如下特性。
对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。
对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库函数把obj1的值复制到obj2,那么obj2将拥有与obj1相同的值。
简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。
现在动手
为了更好地理解POD对象的含义,我们体验一下如何采用memxxx()函数对POD对象进行存储与还原。
编写Win32控制台程序,主程序如下:
【程序 4-3】使用memxxx函数操作POD对象01  #include "st阅读全文>

发表于 @ 2009年08月10日 14:19:00 | 评论( loading... ) | 编辑| 举报| 收藏

2009年08月06日

原创 使用VC获取字符串的长度


4.5.8  字符串的长度
字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。
1.使用sizeof获取字符串长度
sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符0)。对于ANSI字符串和UNICODE字符串,形式如下:sizeof(cs)/sizeof(char)  sizeof(ws)/sizeof(wchar_t) 
可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。
2.使用strlen()获取字符串长度
strlen()及wcslen()是标准C++定义的函数,它们分别获取ASCII字符串及宽字符串的长度,如:size_t strlen( const char *string );  size_t wcslen( const wchar_t *string ); 
strlen()与wcsl阅读全文>

发表于 @ 2009年08月06日 09:26:00 | 评论( loading... ) | 编辑| 举报| 收藏

2009年07月31日

原创 4.5.3 TCHAR、_T与_TEXT


计算机最初使用的不是UNICODE,最初的系统和程序都采用的是ANSI或者MBCS,那么,问题来了:我们开发程序的时候,是采用char还是wchar_t?观察如下代码:char msg[] = "学习C++"; 
当我们准备采用wchar_t时,则需要改成:wchar_t msg[] = L"学习C++"; 
太麻烦了!幸运的是,Visual C++的开发者预知到了这样的麻烦,他们从而为此造出了一批宏,这些宏看起来乱七八糟的,但是确实解决了我们的问题,且看一段代码:TCHAR msg[] = _T("学习C++"); 
这段代码中,msg到底是char数组还是wchar_t数组呢?Visual C++的解释是,如果需要它是char数组,那么它就是char数组;否则,它就是wchar_t数组。这样的魅力来源于宏TCHAR的定义:typedef   unsigned   char   CHAR;  typedef   unsigned   wchar_t   WCHAR;    #ifdef   UNICODE      typedef   wch阅读全文>

发表于 @ 2009年07月31日 12:38:00 | 评论( loading... ) | 编辑| 举报| 收藏

Copyright © bluejoe2000
Powered by CSDN Blog