- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 DLL和进程的地址空间
创建D L L常常比创建应用程序更容易,因为D L L一般只包含独立存在的函数,这些函数可以很容易的被其他的应用程序所调用 。D L L中通常不支持消息循环的处理或者窗口的创建。 D L L只是一组源代码模块,每个模块包含了应用程序(可执行文件)或另一个D L L将要调用的一组函数。当所有源代码文件编 译后,它们就像应用程序的可执行文件那样被链接程序所
2009-08-31 23:48:00 2158 1
原创 DLL入门(一)
自从M i c r o s o f t公司推出第一个版本的Wi n d o w s操作系统以来,动态链接库( D L L)一直是这个操作系统的基石。Windows API 中的所有函数都包含在D L L中。3个最重要的D L L是K e r n e l 3 2 . d l l,它包含用于管理内存、进程和线程的各个函数; U s e r 3 2 . d l l,它包含用于执行用户界面任务(如窗口
2009-08-31 23:37:00 1093
原创 STL高效编程( 五)-尽量使用区间操作函数来代替单元素操作函数。
给定两个vectorv1和v2,使v1的内容和v2的后半部分相同的最简单方法是什么?不要为“当v2有偶数个元素时才有一半”而烦恼。 时间到!如果你的答案是v1.assign(v2.begin() + v2.size() /2, v2.end()); 或者其他很相似的东西,你就完全对了,可以拿金奖。如果你的答案涉及到多于一个函数的调用,但没有使用任何形式的循环,你接近了正确答案
2009-08-30 15:59:00 1487 2
原创 STL高效编程(三) - 用empty()来代替size()判断容器是否为空
用empty()来代替检查size()是否为空对于任意容器c,写下if (c.size() == 0)...本质上等价于写下if (c.empty())... 这就是例子。你可能会奇怪为什么一个构造会比另一个好,特别是事实上empty()的典型实现是一个返回size()是否返回0的内联函数。你应该首选empty()的构造,而且理由很简单:对于所有的标准容器,empt
2009-08-29 22:32:00 6417
原创 STL高效编程(三)-使容器元素的拷贝正确和高效
首先,你必须要明白的是,容器容纳着许多对象,但不是你传给它的那些原始对象,而是对象的拷贝。 此外,当你从容器中获取一个对象时,得到的不是容器里的那个对象,而是对象的拷贝。同样的,当你向容器中添加一个对象时(通过insert或push_back),添加到容器的是你给的对象的拷贝。copy进去,copy出来,这就是STL的方式。所以,STL要求对象必须是可拷贝的。对象被存到容器里之后,对
2009-08-27 23:16:00 2535 2
原创 STL高效编程(二)- 注意容器的不同特点,小心容器无关的代码
STL是建立在泛型之上的。数组泛型为容器,以对象类型为参数。函数泛型成算法,以迭代器类型为参数。指针泛型为迭代器,参数化了所指向的对象的类型。 这只是个开始。独立的容器类型泛化为序列或关联容器,而且类似的容器拥有类似的功能。标准的以连续内存为实现的容器都提供随机访问迭代器,标准的基于节点的容器都提供双向迭代器。序列容器支持push_front或push_back,但关联容器不支持。关
2009-08-26 22:18:00 1122
原创 如何查看各个类型的最大值
问题源于同事的一个问题,VC编译器里如何查看double的最大值? 他在limits.h里没找到。 在limits.h里面,只可以看到整型的最大值,但是看不到浮点数的最大值。浮点数的最大值可以这样得到: #include #include using namespace std; // compile with: /EHsc int main()
2009-08-26 22:01:00 1933
原创 STL高效编程(-) STL的容器
STL有很多概念,迭代器,高效的算法,函数对象,但是对于大多数的开发者而言,STL最突出的地方还是容器(Container),容器远远比数组强大和灵活。 容器可以动态增长,独立管理内存,提供对容器元素的高效的灵活的访问,等等。STL容器是有效的封装最常见的数据结构和算法,在我看来,STL容器就是代表着c++的数据结构,从数组,链表,栈,队列,表,哈希表。每一个容器代表着一种数据结构。
2009-08-25 22:47:00 2317
原创 CListBox一些用法
最近编程序需要用到listbox,感觉listbox还是比较简单的。有问题,去msdn。 1. listbox 有单选和多选两个模式。 单选状态下,只能选择一个item,多选状态下,可以选择多个item。 2. list的每一个item有会有显示的text和与之关联的data。一个是字符串类型,一个是整型。 3. 如何实现listlox元素的上移和下移
2009-08-24 16:23:00 10381 3
原创 SendMessage和PostMessage的区别
1、首先是返回值意义的区别,我们先看一下 MSDN 里的声明: LRESULT SendMessage ( HWND hWnd, UINT Msg, WPARAM wParam,
2009-08-18 10:33:00 982 1
原创 如何将64位整型转换为宽字符串
今日遇到的一个问题,给出的解决方案如下: 1. 首先,用sprintf转换为char * (安全考虑,用springf_s或者是snprintf)2. 用MultiByteToWideChar将转换后的字符串转换为宽字符(unicode) 注意的是,对于非 int64, 可以用wsprintf()直接将数据格式化为宽字符集,但是wsprintf不支持64位的整型。 代
2009-08-17 11:27:00 3377
原创 网络字节序转换函数(64位)
在网络编程里,网络字节序是big-endian的,而大部分的PC的系统都是X86处理器系列,X86采用的是little-endian,所以需要将网络数据流转换成本地数据流的话,需要进行字节序的转换。 标准库里提供了hlton()和nthl()两个函数来支持转换。hston(unsigned short), hlton(unsigned long) 将本地字节序转换为网络字节序
2009-08-17 11:14:00 16761 4
原创 VC++中如何获得一个当前进程的运行目录
利用windows API获得: CString GetAppPath() { CString strAppPath; // 保存结果 TCHAR szModuleFileName[MAX_PATH]; // 全路径名 TCHAR drive[_MAX_DRIVE]; // 盘符名称,比如说C盘啊,D盘啊 TCHAR dir[_MAX_DIR]
2009-08-13 16:26:00 2851 1
原创 memmove 和 memcpy的区别
memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count);
2009-08-13 16:12:00 1185 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人