DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2014年2月17日

摘要: 本文为验证后的结果,准确性较高,适合任何人阅读静态库和动态库链接分析1、文件组成结构静态库:lib 头文件动态库:lib dll 头文件从组成上看,动态库和静态库的差异在于动态库多了一份dll文件,导致动态库可以独立存在,2、链接方式静态库:只能静态链接动态库:动态链接和静态链接3、运行效果静态库:相当于直接把代码段写入到exe或dll文件中动态库:相当于与exe或dll形成了一种关系,exe或dll可以到动态库中去查找所需要的函数4、差别:静态库:不需要导出就可以被链接使用动态库:需要导出后方可使用(动态链接)5、编译静态库:编译后只有lib文件动态库:若没有导出函数刚只能编译出dll文.. 阅读全文
posted @ 2014-02-17 22:38 DoubleLi 阅读(783) 评论(0) 推荐(0)

摘要: 1.什么是静态连接库,什么是动态链接库 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。静态链接库与静态链接库调用规则总体比较如下。对于静态链接库(比较简单): 首先,静态链接库的使用需要库的开发者提供生成库的.h头 阅读全文
posted @ 2014-02-17 22:25 DoubleLi 阅读(1674) 评论(0) 推荐(0)

摘要: 大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的 /subsystem 选项该选项的语法形式如下:/SUBSYSTEM:{CONSOLE|EFI_AP 阅读全文
posted @ 2014-02-17 19:45 DoubleLi 阅读(1287) 评论(0) 推荐(0)

摘要: 在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.下面介绍了一下该指令的一些常用参数,希望对大家有所帮助!一. message 参数。message它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#pragma message(“消息文本”)当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86 阅读全文
posted @ 2014-02-17 19:44 DoubleLi 阅读(697) 评论(0) 推荐(0)

摘要: 这个问题看是很简单,但是在不同语言中实现的方式却千差万别,如果不知道方法,还真是麻烦,我就是在C#中遇到该问题,让我费了很大的周折,才在msdn查到。一、16进制字符串转数字 1、C/C++ I、最简单的办法:sscanf(“12AB”,,”%x”,&lngHex); //字符也可以为”0x12AB” II、有个朋友,自行编写函数实现了该功能,据说速度比sscanf快: BOOL HexToDec( LPCTSTR shex,int& idec ) { int i,mid; int len = lstrlen( shex ); if( len>8... 阅读全文
posted @ 2014-02-17 19:41 DoubleLi 阅读(8089) 评论(0) 推荐(0)

摘要: windows下此处的”非正常断开”指TCP连接不是以优雅的方式断开,如网线故障等物理链路的原因,还有突然主机断电等原因有两种方法可以检测:1.TCP连接双方定时发握手消息 2.利用TCP协议栈中的KeepAlive探测第二种方法简单可靠,只需对TCP连接两个Socket设定KeepAlive探测,所以本文只讲第二种方法在Linux,Window2000下的实现(在其它的平台上没有作进一步的测试)Windows 2000平台下头文件#include //定义结构及宏struct TCP_KEEPALIVE {u_longonoff;u_longkeepalivetime;u_longkeepa 阅读全文
posted @ 2014-02-17 19:39 DoubleLi 阅读(840) 评论(0) 推荐(0)

摘要: for(;iter!=mapStudent.end();){ if((iter->second)>=aa) { //满足删除条件,删除当前结点,并指向下面一个结点 mapStudent.erase(iter++); } else { //条件不满足,指向下面一个结点 iter++; }}这种删除方式也是STL源码一书中推荐的方式,分析 mapStudent.erase(iter++)语句,map中在删除iter的时候,先将iter做缓存,然后执行iter++使之指向下一个结点,再进入erase函数体中执行删除操作,删除时使用的iter就是缓存下来的iter(也就是当前iter(做了 阅读全文
posted @ 2014-02-17 14:30 DoubleLi 阅读(12439) 评论(0) 推荐(2)

摘要: 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);他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。第二种情况下,问题出现在右边的两个字节,这两个字节 阅读全文
posted @ 2014-02-17 13:46 DoubleLi 阅读(560) 评论(0) 推荐(0)