2013年1月2日
摘要: #include "stdafx.h" #include <iostream> #include <string.h> #include <windows.h> #import <Shell32.dll> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { CoInitialize... 阅读全文
posted @ 2013-01-02 12:29 好好单调 阅读(430) 评论(0) 推荐(0) 编辑
  2012年12月6日
摘要: 对单个参数的构造函数使用 C++ 关键字 explicit定义:通常, 如果构造函数只有一个参数, 可看成是一种隐式转换. 打个比方, 如果你定义了 Foo::Foo(string name), 接着把一个字符串传给一个以 Foo 对象为参数的函数, 构造函数 Foo::Foo(string name) 将被调用, 并将该字符串转换为一个 Foo 的临时对象传给调用函数. 看上去很方便, 但如果你并不希望如此通过转换生成一个新对象的话, 麻烦也随之而来. 为避免构造函数被调用造成隐式转换, 可以将其声明为 explicit.优点:避免不合时宜的变换.缺点:无结论:所有单参数构造函数都必须是显式 阅读全文
posted @ 2012-12-06 19:20 好好单调 阅读(285) 评论(0) 推荐(0) 编辑
  2012年12月4日
摘要: 接上一个简单的demo之后,又花了几天时间做了个简单的多线程断点续传下载。主要用到的知识还是上一个Demo中的关于如何获取指定范围数据的知识点。这里因为是多线程的断点续传下载,所以当然是在逻辑上要让文件的各个数据部分同时被写入,因此就引入了数据分块获取和写入以及记录分块信息的功能。实现思路:1、仿照迅雷,使用两个临时文件,一个是要下载的文件加上临时后缀,一个是记录下载信息的临时文件。2、开始时,判断目标文件是否存在,存在则认为下载完成了,否则以不存在则创建的方式打开临时下载文件(这里如果是新创建的话,要将文件大小设置成目标文件大小,这里文件的大小要通过HTTP的HEAD VERB去获取),然后 阅读全文
posted @ 2012-12-04 11:49 好好单调 阅读(828) 评论(0) 推荐(1) 编辑
摘要: 最近比较空闲,尝试了一下网络方面的编程,于是兴起写一个多线程断点续传下载的简单demo。于是首先在网络上搜索各种实现思路,最终决定先从一个简单的单线程断点续传下载开始。实现思路:每次都以如果不存在则创建的方式打开要下载的文件,然后获取其大小size,然后给URL发送请求头,带上头信息range,并以size作为要获取的数据起始位置,终止位置不写(表明要获取后面所有的数据)。然后便是不断的向文件末尾追写数据。直至某一次启动下载的时候发现返回的状态码为416,表明范围超出了,则表示文件已经下载完成了。关键知识点:1、需要对HTTP协议有初步的理解,主要是对请求头与返回头的格式要求进行理解。2、要明 阅读全文
posted @ 2012-12-04 10:46 好好单调 阅读(1150) 评论(0) 推荐(0) 编辑
  2012年11月19日
摘要: 调用约定(有些书上也叫调用惯例)指的是,函数的调用方和被调用方对于函数如何调用所达成的一个约定。网上关于各种调用约定的说明已经比较多了,我这里主要说一下调用约定的由来。参考资料:《程序员的自我修养》第十章前两节。调用约定的由来我们知道,一个应用程序的内存空间中,有栈这个结构来维护函数调用的上下文,在进行一个函数的调用之前,通常都要先push进其参数(这里具体整个栈的变化请参考其他资料),然后被调用的函数内部就能正常的访问这些个参数。那么,这里必然需要一个规定,就是规定参数是以什么顺序进来的,以及最后由谁去清理。如果调用者和被调用者没有这种约定,调用者以参数出现的顺序压入,而被调用者仍未调用者是 阅读全文
posted @ 2012-11-19 15:37 好好单调 阅读(544) 评论(0) 推荐(1) 编辑
  2012年11月18日
摘要: 安装VS2010后,使用windows默认的命令行工具,很多VS带的命令工具不能使用,比如dumpbin,lc等等,没有找到很简单的方法去增加。但是VS自带了一个命令行工具,名字就叫windows sdk 7.1 command prompt,发现其可以使用这些个命令。但是每次进去都要手动更改目录(使用CD命令,带上/d属性,具体参见帮助),在网上搜了下更改默认目录的方法如下:(参考链接:http://www.foolegg.com/how-to-change-the-default-path-of-command-prompt-cmd/)打开注册表,在HKEY_CURRENT_USER\So 阅读全文
posted @ 2012-11-18 12:40 好好单调 阅读(1323) 评论(0) 推荐(0) 编辑
  2012年11月16日
摘要: 参考资料:《程序员的自我修养》3.5.3以及3.5.4小节。符号修饰的由来20世纪70年代以前,编译器编译代码时产生的目标文件中,符号名与相应的变量和函数的名字是一样的,随着编程语言的发展,例如C语言,如果一个C语言程序要使用这些库的话,其自身就不能使用这些库中已经声明了的函数和变量的名字作为符号名,否则将会跟现有的目标文件发生名称冲突。为了防止这类符号名冲突,各平台下的编程语言规定了各自的符号生成语法。如C在UNIX下在函数名和变量前加下划线作为符号名。这种给函数名增加特定符号来使其符号名唯一的方式就是符号修饰。这种简单的符号修饰没有从根本上解决符号冲突的问题,比如同一种编程语言编写的目标文 阅读全文
posted @ 2012-11-16 18:43 好好单调 阅读(977) 评论(0) 推荐(0) 编辑
摘要: windows中,链接库分为两种类型:静态链接库.lib和动态链接库.dll。其中动态链接库在被使用的时候,通常还提供一个.lib,称为引入库,它主要提供被Dll导出的函数和符号名称,使得链接的时候能够找到dll中对应的函数映射。静态链接库和动态链接库的作用相似,都是提供给其他程序进行调用的资源。其中,动态链接库的调用方法分隐式调用(静态导入调用)和显示调用(动态导入调用)。参考资料:孙鑫 《VC++深入详解》视频教程第十九课。编译环境:Microsoft Visual Stdio 2010DLL导出符号例,首先生成一个dll1.dll和dll1.lib// DLL1工程,dll1.cpp// 阅读全文
posted @ 2012-11-16 13:18 好好单调 阅读(708) 评论(0) 推荐(0) 编辑
  2012年11月15日
摘要: 这两天简单研究了下CURL访问网站读取数据的方式,做了简单的实验,思路很简单,就是提供一个URL,然后从URL返回的数据读取出来,显示到控制台,或者存储到文件中。具体的描述以及注意事项,代码的注释中都有写明。上代码。// DemoLibcurl.cpp : Defines the entry point for the console application.//#include "stdafx.h"#define CURL_STATICLIB // 由于我使用的是CURL静态链接,所以需要定义上这个宏#include "http://www.cnblogs.co 阅读全文
posted @ 2012-11-15 19:40 好好单调 阅读(3784) 评论(0) 推荐(0) 编辑
  2012年11月7日
摘要: 最近电脑突然发现无法进入睡眠状态了,前段时间还正常来着。我中午要午休,电脑上通常开着很多东西,不想它关机,所以这个睡眠状态对我就很重要了。 搜索了半天,解决方法有说什么被硬件或者软件唤醒啊什么的,我也都尝试了,都没用。 我的症状是: 点击进入睡眠后,显示器会提示进入睡眠模式,然后显示器关了,但是主机却一点事都没有,就跟啥都没做一样。然后一晃鼠标,显示器就亮了。 其实仔细考虑这个过程,会发现肯定不是被其他东西唤醒的,唤醒怎么着也要有个过程,主机怎么着也要睡一下下,但是我这症状就是一点也没有。最后终于找到原因所在,我开启了”离开模式“。百度下”离开模... 阅读全文
posted @ 2012-11-07 14:13 好好单调 阅读(766) 评论(0) 推荐(0) 编辑