DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上一页 1 ··· 402 403 404 405 406 407 408 409 410 ··· 474 下一页

2013年8月30日

摘要: __cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其他语言通信的时候就要注意了,只有用相同的方法才能够调用成功.另外,像printf这样接受可变个数参数的函数只有用cdecl才能够实现. __declspec主要是用于说明DLL的引出函数的,在某些情况下用__declspec(dllexport)在DLL中生命引出函数,比用传统的DEF文件方便一些.在普通程序中也可以用__declspec(dllimport)说明函数是位于另一个DLL中的导出函数.int WIN.. 阅读全文
posted @ 2013-08-30 16:36 DoubleLi 阅读(1423) 评论(0) 推荐(0)

摘要: 这是给编译器用的参数设置,有关结构体字节对齐方式设置,#pragma pack是指定数据在内存中的对齐方式。#pragma pack (n) 作用:C编译器将按照n个字节对齐。#pragma pack ()作用:取消自定义字节对齐方式。#pragma pack (push,1)作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐#pragma pack(pop) 作用:恢复对齐状态因此可见,加入push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,但是很多时候两者差别不大如:#pragma pack(push) //保存对齐状态#pragma pack(4 阅读全文
posted @ 2013-08-30 09:40 DoubleLi 阅读(565) 评论(0) 推荐(0)

摘要: 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。例如,下面的结构各成员空间分配情况:struct test{ char x1; short x2; float x3; char x4;};结 构的第一个成员x1,其偏移地址为0,占据了第1个字节。第二个成员x2为short类型,其起始地址必须2字节 对界,因此,编 阅读全文
posted @ 2013-08-30 09:36 DoubleLi 阅读(480) 评论(0) 推荐(0)

摘要: 文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一次取从0x00000002-0x00000003的一个short,第二次取从0x00000004-0x00000... 阅读全文
posted @ 2013-08-30 09:30 DoubleLi 阅读(535) 评论(0) 推荐(0)

摘要: VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了“对齐”处理。 对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)Char 偏移量必须为sizeof(char)即1的倍数int 偏移量必须为sizeof(int)即4的倍数float 偏移量必须为sizeof(float)即4的倍数double 偏移量必须为sizeof(double)即8的倍数Short 偏移量必须为sizeof(short)即2的倍数若现存char 偏移量为1 那么再存int (1不是4的整数倍)就不可以了下面 阅读全文
posted @ 2013-08-30 08:57 DoubleLi 阅读(1006) 评论(0) 推荐(1)

2013年8月29日

摘要: 为什么在DllMain里不能调用LoadLibrary和FreeLibrary函数?MSDN里对这个问题的答案十分的晦涩。不过现在我们已经有了足够的知识来解答这个问题。考虑下面的情况: (a)DllB静态链接DllA (b)DllB在DllMain里调用DllA的一个函数A1() (c)DllA在DllMain里调用LoadLibrary("DllB.dll")分析:当执行到DllA中的DllMain的时侯,DllA.dll已经被映射到进程地址空间中,已经加入到了module list中。当它调用LoadLibrary("DllB.dll")时,首先会调 阅读全文
posted @ 2013-08-29 17:58 DoubleLi 阅读(3006) 评论(0) 推荐(1)

2013年8月27日

摘要: 1、What is achieved by prefixing the 'static' keyword to a file-level function or file-level variable declaration?使用static关键字修饰文件级的函数和变量起到什么作用?key:对变量来说,不允许文件外的程序访问;对函数来说,该函数的实现必须在这个文件内完成,并且不允许文件外的程序调用。2、Describe the difference between the“IS A”and“HAS A”object relationships. Which is the str 阅读全文
posted @ 2013-08-27 14:56 DoubleLi 阅读(490) 评论(0) 推荐(0)

摘要: 提示1:对“内存结构”表示有疑问或不解的,先参考:http://blog.csdn.net/guogangj/archive/2007/05/25/1625199.aspx,本文使用的表示方法和VC6的Memory视图一致,即:左上表示低位。提示2:下文提到的“类大小”严格上来说是该类经过实例化的对象的大小。当然了,光研究长度的话,两者差别不大,因为:CClassA objA,sizeof(CClassA)和sizeof(objA)得到的结果都是一样的。一、真空类class CNull{};长度:1内存结构:??评注:长度其实为0,这个字节作为内容没有意义,可能每次都不一样。二、空类class 阅读全文
posted @ 2013-08-27 14:54 DoubleLi 阅读(534) 评论(0) 推荐(0)

摘要: (本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了)问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在DLL中,而这部分界面又需要使用到Tooltip,但DLL中的虚函数PreTranslateMessage无法被调用到,原因大家可以在网上搜索一下,这并不是我这篇文章要讲的。PreTranslateMes 阅读全文
posted @ 2013-08-27 14:52 DoubleLi 阅读(26175) 评论(5) 推荐(2)

摘要: 一、parent:创建者,owner:所有者小玉的父母生下小玉,养到8岁,卖给贾府当丫头小玉的父母是parent,贾府是owner二、1.Pop-up窗口:一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消息框,也可以用于应用程序的主窗口,弹出窗口可以不必具有标题栏2.Overlapped窗口:一个重叠窗口是一个必须具有WS_OVERLAPPED属性的窗口,也就是一个重叠窗口必须具有边框,标题栏,客户区域。重叠窗口可以是一个子窗口,也可以是一个Top-Level窗口,重叠窗口一般都用于一个应用程序的主窗口3.Top 阅读全文
posted @ 2013-08-27 14:49 DoubleLi 阅读(3130) 评论(0) 推荐(1)

上一页 1 ··· 402 403 404 405 406 407 408 409 410 ··· 474 下一页