静态函数

动态链接库dll的 静态加载 与 动态加载

[亡魂溺海] 提交于 2020-03-17 03:52:44
动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找 。 而静态链接就是把所有用到的函数全部链接到exe文件中。 动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入; 而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。 静态链接方法:#pragma comment(lib, "test.lib") ,静态链接的时候, 载入代码就会把程序会用到的动态代码或动态代码的地址确定下来 静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库 动态链接方法:LoadLibrary()/GetProcessAddress()和FreeLibrary() ,使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的 逻辑地址 ,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这种方式使程序初始化时间较短,但运行期间的性能比不上静态链接的程序。 1. 生成 静态链接库 newdll) win32项目 -> dll 添加.h文件 betabinlib.h #ifndef BETABINLIB_H #define BETABINLIB_H

C#做外挂的常用API

妖精的绣舞 提交于 2020-03-16 15:02:55
使用系统; 使用System.Collections.Generic; 使用System.Text; 使用System.Runtime.InteropServices; //这个肯定要的 命名空间WindowsApplication1 { 类win32API { public const int OPEN_PROCESS_ALL = 2035711; public const int PAGE_READWRITE = 4; public const int PROCESS_CREATE_THREAD = 2; public const int PROCESS_HEAP_ENTRY_BUSY = 4; public const int PROCESS_VM_OPERATION = 8; public const int PROCESS_VM_READ = 256; public const int PROCESS_VM_WRITE = 32; 私有const int PAGE_EXECUTE_READWRITE = 0x4; 私有常量int MEM_COMMIT = 4096; 私有const int MEM_RELEASE = 0x8000; 私有const int MEM_DECOMMIT = 0x4000; 私有const int PROCESS_ALL_ACCESS =

设计模式——代理模式

霸气de小男生 提交于 2020-03-16 14:46:28
平时我们使用的框架中非常频繁地使用了动态代理。可以说如果一个框架不使用动态代理的话,这个框架不太可能做成一个通用的框架。因此动态代理的知识是我们必须要掌握的知识。 本博客是网络转载的,原文请点击 这里 代理模式简介 Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题。(某些对象只想提供部分方法让外部对象访问) 代理模式是一种常用的结构型设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息( beforeAdvice ),过滤消息并转发消息,以及进行消息被委托类执行后的后续处理( afterAdvice ) 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。 通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性 。 更通俗的说,代理解决的问题当两个类需要通信时,引入第三方代理类,将两个类的关系解耦,让我们只了解代理类即可,而且代理的出现还可以让我们完成与另一个类之间的关系的统一管理,但是切记,代理类和委托类要实现相同的接口,因为代理真正调用的还是委托类的方法。 使用场景 方法增强(添加注解实现一些额外的功能) AOP 等 代理模式分类 按照代理的创建时期

基础知识点(一)

瘦欲@ 提交于 2020-03-16 11:13:45
基础知识点(一) 一、 面向对象思想的好处 1 、面向对象也是基于面向过程的编程思想,但是面向对象相比于面向过程更符合我们的思维方式,万物皆对象。 2 、可以将复杂的问题简单化,大大提高了程序的可读性和可维护性 3 、面向过程思想中,我们是程序的执行者,面向对象当中,我们是程序的调用者,这样的话也可以方便程序给其他人调用,提高了程序的扩展性 面向对象的三大基本特征以及五大基本原则: 基本特征: 1 、封装 2 、继承 3 、多态 基本原则: 1、 单一职责原则 2、 里氏替换原则 3、 依赖倒置原则 4、 接口隔离原则 5、 开放封闭原则 二、 类:类是抽象的,是一组相关的属性和行为的集合,一个模板。 对象:对象是具体的,是客观存在的实例,是该类事物的具体体现 属性 —— 对象具有的各种特征 每个对象的每个属性都拥有特定值 方法 —— 对象执行的操作 三、对象和类的关系:特殊到一般,具体到抽象。 类:我们叫做 class 。 对象:我们叫做 Object, instance( 实例 ) 。以后我们说某个类的对象,某个类的实例。是一样的意思。 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。 对象是 Java 程序的核心,在 Java 程序中“万事万物皆对象”。 JDK

程序员求职之道(《程序员面试笔试宝典》)之程序设计基础(static的使用)?

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-16 08:18:04
在 C 语言中,关键字 static 的意思是静态,它有三个明显的作用:首先,在函数体内,静态变量具有“记忆”功能,即一个被声明为静态的变量在这一函数被调用过程中其值维持不变。其次,在模块内(但在函数体外),它的作用域范围是有限制的,即如果一个变量被声明为静态的,那么该变量可以被模块内所有函数访问,但不能被模块外其它函数访问,它是一个本地的全局变量,而如果一个函数被声明为静态的,那么该函数与普通函数作用域不同,其作用域仅在本文件中,它只可被这一模块内的其它函数调用,不能被模块外的其它函数调用,也就是说这个函数被限制在声明它的模块的本地范围内使用。所以,内部函数应该在当前源文件中说明和定义,对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。 具体而言, static 全局变量和普通的全局变量的区别在于 static 全局变量只初始化一次,这样做的目的是为了防止在其它文件单元中被引用。 static 局部变量和普通局部变量的区别在于 static 局部变量只被初始化一次,下一次的运算依据是上一次的结果值。 static 函数与普通函数的区别在于作用域不一样, static 函数只在一个源文件中有效,不能被其它源文件使用。 在 C++ 中,在类内数据成员的声明前加上关键字 static ,该数据成员就是类内的静态数据成员

成员修饰:静态和实例成员

依然范特西╮ 提交于 2020-03-13 07:44:02
对类的内部数据成员和函数成员都可以用static修饰。 如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。 在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。 静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。 1 public class Space 2 { 3 4 public static void Main( string [] args) 5 { 6 System.Console.WriteLine( new Order().CreateNumber()); // 725-1 7 System.Console.WriteLine( new Order().CreateNumber()); // 725-2 8 } 9 10 } 11 12 13 14 15 public class Order 16 { 17 18 private static int Count; // 该Count能被所有的实例访问 19 public string Number; 20 21 public string CreateNumber() 22 { 23 24 Count ++ ;

[C] linux静态链接库与动态链接库详解

寵の児 提交于 2020-03-12 20:44:48
http://blog.chinaunix.net/u2/76292/showart.php?id=1274181 一顺便说说了哦 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file).程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件名为"libxxx.a"的形式. 其实,我们也可以把对一些库函数的链接载入推迟到程序运行的时期(runtime).这就是如雷贯耳的动态链接库(dynamic link library)技术. 二动态链接库的特点与优势 首先让我们来看一下,把库函数推迟到程序运行时期载入的好处: 1.可以实现进程之间的资源共享。 什么概念呢?就是说,某个程序的在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝 了。如果有,则让其共享那一个拷贝;只有没有才链接载入。这样的模式虽然会带来一些“动态链接”额外的开销,却大大的节省了系统的内存资源。C的标准库就 是动态链接库,也就是说系统中所有运行的程序共享着同一个C标准库的代码段. 2.将一些程序升级变得简单

C++基础之static(静态)变量

巧了我就是萌 提交于 2020-03-12 11:43:07
static 表示静态 作用: 1、在函数体内,静态变量的值维持不变(记忆功能) 2、是一个本地的全局函数,即只能被本模块的函数访问(隐藏功能) static变量: static全局变量和普通全局变量的区别:static变量只初始化一次(即不能重复定义),这样可以防止在其他文件单元中被引用 static局部变量和普通局部变量的区别:static变量值初始一次,下次的运算依据是上一次的值(第二次碰到初始化语句直接跳过即可) static函数: static函数只能在一个源文件中有效,在其他源文件无效 类中的static: 1、无论类对象被定义多少个,静态数据成员始终只有一份,用作共享 2、静态数据成员存储在全局数据区,定义时要分配空间,即使类没有被实例化,静态数据成员也可以被使用 3、遵从public、private、protect访问 4、static的成员函数在类外初始化(类中只是声明,cpp中才是初始化),但此时不要加static关键字 5、static数据成员没有this指针(普通的类成员函数都有),因此不能访问类中的非静态成员函数,只能访问成员函数 优点: 1、不存在全局名字冲突 2、信息可以隐藏,可以为private 注:不要在头文件定义静态变量,不要在头文件定义任何变量 来源: https://www.cnblogs.com/huahua12/p/8495224

Java修饰符

拥有回忆 提交于 2020-03-12 07:46:13
访问权限修饰符 访问级别 同类 同包 子类 不同包 public Y Y Y Y protected Y Y Y N default Y Y N N private Y N N N protected 经常需要允许子类访问定义在父类中的数据和方法,但是不允许非子类访问这些数据和方法,这种情况下就可以使用protected,它允许任何包中的子类访问父类 default (缺省,什么也不写)在同一包内可见,不使用任何修饰符 实际上它限制的范围就是一个包内可以访问。如果不在一个包内,即使继承关系任然是不能访问的。它是针对本包访问而设计的 static static 修饰符,表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 用法:是一个修饰符,用于修饰成员(成员变量,成员函数),当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调,类名.静态成员。 存在:方法区,共享区,数据区(非堆内存、栈内存的另一个存储区),static块仅在该类被加载时执行一次。 特点:随着类的加载而加载,也就是说静态会随着类的消失而消失,说明他的 生命周期最长;优先于对象的存在 ,静态先存在,对象后存在; 被所有对象所共享;可以直接被类名调用。 static变量 ——也称作 静态变量

关于MFC在静态文本中显示ICON

隐身守侯 提交于 2020-03-11 09:17:52
我们有时候在使用MFC的时候想要某些控件能显示机器设备的运行状态,例如三色灯的指示效果,个人的思路是在界面上用静态文本框去加载一个ICON或者是BMP图片,就是说贴图,不知道大家有没有更好的思路.既然有了思路那就开始吧,具体如下来完成. 如何实现static加载icon,加载bmp基本上类似,我们首先想到的是在静态文本框里面绘制ICON,是SetIcon函数,但是开始我使用这个函数函数没有成功,因为他的参数是一个句柄HICON,那么我们就先要获取他的句柄用以下方法,分为4步,我已经验证过: 1.HICON hicon1 = LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON_GREEN));//获取icon的句柄,这里的IDI就是我们要显示的ICON的ID; 2.CStatic *pStatic1=(CStatic*)GetDlgItem(IDC_STATIC_I1);//定义一个指向静态文本框的指针,这里的IDC是我们静态文本的ID; 3.pStatic1-> ModifyStyle(0x0,SS_ICON|SS_CENTERIMAGE); //设置icon的风格; 4.pStatic1-> SetIcon(hicon1); //调用设置ICON的函数 来源: https://www.cnblogs.com