句柄

对象访问定位

ぐ巨炮叔叔 提交于 2020-04-07 00:45:52
句柄访问 jvm栈中的引用类型指向java堆里的句柄池,句柄池指针分别指向对象实例和类型;好处是:引用类型指针永远指向句柄池地址,新的对象创建的时候只是句柄池指针有变化而已; 直接指针访问 引用类型直接指向对象实例,对象头的类型指针指向方法区里的类型文件(class文件);好处是寻找对象非常快 来源: oschina 链接: https://my.oschina.net/u/1792430/blog/667843

C++调用外部应用程序

我们两清 提交于 2020-04-07 00:04:44
  很多时候,我们的程序需要调用DOS命令,通过Dos命令调用其他程序从而完成所需要完成的功能。比如,调用Dos程序PKZIP完成ZIP包的解压缩,调用SVN完成文件的更新或者上传。但是在程序运行时又要求没有DOS控制台的窗口出现,而且一切本应该在DOS下显示的信息都应该出现在我们程序提供的文本框里。 如果才能实现这种功能?需要解决两个问题: 1、调用外部应用程序。 2、不显示DOS窗口,并能将应该在DOS显示的内容,重定向到自己程序内。 C++ 调用外部应用程序有三个 SDK : WinExec , ShellExecute , CreateProcess .Net调用外部应用程序用System.Diagnostics.Process.Start(processStartInfo) 其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。 (1)WinExec 两个参数,前一个指定路径,后一个指定显示方式。 (2)ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。 (3)CreateProcess 一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等

CreateDIBSection

流过昼夜 提交于 2020-04-04 04:21:09
  函数功能:该函数创建应用程序可以直接写入的、与设备无关的位图(DIB)。该函数提供一个指针,该指针指向位图位数据值的地方。可以给文件映射对象提供句柄,函数使用文件映射对象来创建位图,或者让系统为位图分配内存。   函数原型:HBITMAP CreateDIBSection(HDC hdc,CONST BITMAPINFO *pbmi,UINT iUsage,VOID** ppvBits,HANDLE hSection,DWORD dwOffset);   参数:   hdc:设备环境句柄。如果iUsage的值是DIB_PAL_COLORS,那么函数使用该设备环境的逻辑调色板对与设备无关位图的颜色进行初始化。   pbmi:指向BITMAPINFO结构的指针,该结构指定了与设备无关位图的各种属性,其中包括位图的维数和颜色。   iUsage:指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型(要么是逻辑调色板索引值,要么是原文的RGB值)。下列值是系统定义的,其含义为:   DIB_PAL_COLORS:表示成员bmiColors是hdc指定的设备环境的逻辑调色板,使用的是16位索引值数组。   DIB_RGB_COLORS:表示结构BITMAPINFO中包含了RGB值的数组。   ppvBits:指向一个变量的指针

2019-09-16 PHP CURL CURLOPT参数说明(curl_setopt)

我只是一个虾纸丫 提交于 2020-03-28 07:38:42
CURLOPT_RETURNTRANSFER 选项: curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 如果成功只将结果返回,不自动输出任何内容。 如果失败返回FALSE curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); 或着不使用这个选项: 如果成功只返回TRUE,自动输出返回的内容。 如果失败返回FALSE PHP中CURL方法curl_setopt()函数的一些参数 bool curl_setopt (int ch, string option, mixed value) curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。 下列选项的值将被作为长整形使用(在option参数中指定): • CURLOPT_INFILESIZE : 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。 • CURLOPT_VERBOSE : 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。 • CURLOPT_HEADER : 如果你想把一个头包含在输出中,设置这个选项为一个非零值。 • CURLOPT_NOPROGRESS: 如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。注意

关于句柄

强颜欢笑 提交于 2020-03-23 02:31:13
所谓句柄实际上是一个数据,是一个Long (整长型)的数据。 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。 如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢? 为了解决这个问题

windows 常用thread方法

故事扮演 提交于 2020-03-23 02:09:28
3 月,跳不动了?>>> 1.HANDLE CreateThread( _In_opt_LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_SIZE_T dwStackSize, _In_LPTHREAD_START_ROUTINE lpStartAddress, _In_opt___drv_aliasesMemLPVOID lpParameter, _In_DWORD dwCreationFlags, _Out_opt_LPDWORD lpThreadId ); 参数说明 lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE dwStackSize,设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。 lpStartAddress,指向线程函数的指针. lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。 dwCreationFlags :线程标志,可取值如下 (1)CREATE

关于什么是句柄(经典)

安稳与你 提交于 2020-03-20 04:31:19
转自:http://hi.baidu.com/fancys_he/blog/item/2861344affcfe32609f7efd1.html 句柄 是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的 句柄 标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS 句柄 有点象C语言中的文件 句柄 。 从上面的定义中的我们可以看到, 句柄 是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个 句柄 ,之后其他的WINDOWS函数就可以使用该 句柄 ,以引用相应的对象。 如果想更透彻一点地认识 句柄 ,我可以告诉大家, 句柄 是 一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内 存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作 系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要

基于Delphi的融合DLL中的窗口

和自甴很熟 提交于 2020-03-18 04:36:15
        摘要:提出了一种简单的方法将DLL中的窗口融合(嵌入)到其他应用程序或DLL的窗口中,使用本方法可以简便地实现具有强扩展性和升级能力的软件系统。      1、引言   在开发一个大型通用控制系统时曾遇到这么一个问题:该系统软件包由若干个可执行文件和动态链接库组成,因为扩展性和兼容性的要求,需要将系统划分为若干个可执行文件和动态链接库,并且在大部分DLL中封装各自的操作界面,在调用DLL时将其中包含的部分界面嵌入地显示在主界面的某个区域或某个窗口内,与主界面的其他部分浑然一体。这样主程序与DLL在功能操作上各司其职,在外部界面上又彼此交融,使用户可以通过增加和修改DLL来实现对系统内部、外部的扩展和升级;同时因为DLL的跨语言特性,内部包含操作界面的DLL可以更为方便地在以后的不同工作、不同语言环境中更好地重复使用。   这一问题的应用较为广泛,但没有充分的资料来帮助解决,经过不断的试验,笔者将初步体会总结出来,用以抛砖引玉。本文中涉及的主程序和DLL都是在Delphi5.0下实现的,但因为其中所依赖的基础还是Windows本身的窗口机制,所以对于其他的语言平台也有实际意义。   在Delphi中如何创建DLL及输出DLL中的函数有较多资料进行过介绍,在本文中不再赘述,本文只针对DLL中的窗口部分做重点介绍。   2、DLL中自带窗口的创建和显示  

Java final数据

允我心安 提交于 2020-03-17 00:25:31
许多程序设计语言都有自己的办法告诉编译器某个数据是“常数”。常数主要应用于下述两个方面: 1)编译期常数,它永远不会改变; 2)在运行期间初始化的一个值,我们不希望它发生变化。ss 对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程里。也就是说,计算可在 编译期间提前执行,从而节省运行时的一些开销 。在Java 中,这些形式的常数 必须属于基本数据类型(Primitives),而且要用final 关键字进行表达。 无论static 还是final 字段,都只能存储一个数据,而且不得改变。 若随同对象句柄使用final,而不是基本数据类型,它的含义就稍微让人有点儿迷糊了。对于基本数据类型,final 会将值变成一个常数; 但对于对象句柄,final 会将句柄变成一个常数。进行声明时,必须将句柄初始化到一个具体的对象。而且永远不能将句柄变成指向另一个对象 。 然而,对象本身是可以修改的。Java对此未提供任何手段,可将一个对象直接变成一个常数。 来源: https://www.cnblogs.com/frankyou/p/6022795.html

《Windows via C/C++》学习笔记 —— 线程基础

徘徊边缘 提交于 2020-03-15 19:08:27
  每个进程都有一个主线程。每个线程都包含2个部分: 1、一个内核对象,操作用此来管理线程,里面包含了线程的状态; 2、一个线程堆栈,用来维护所有的函数参数和局部变量。   启动线程,需要提供一个线程入口函数,该函数原形必须为如下形式: DWORD WINAPI ThreadFunc(PVOID pvParam) { DWORD dwRet = 0 ; return dwRet; }   在这个函数里,你的线程执行相关任务,当该函数返回时,线程便停止了运行。线程堆栈也被清除,线程内核对象的引用计数减1。   你可以使用CreateThread函数创建一个线程,该函数返回一个线程内核对象句柄。   结束一个线程有4中方法: 1、线程函数返回 2、线程自己调用ExitThread函数终止自己运行 3、本进程内的其他线程或该线程自己调用TerminateThread函数指定终止一个进程 4、包含该线程的进程终止   应该尽量使用第1种方法,确保线程终止的时候所有资源可以被系统正确地回收。   线程内核对象中维护了一些数据结构,包括一个反应该线程最近运行情况的上下文内容“CONTEXT”,里面有一些“CPU的寄存器信息”,主要包括一个SP和IP,分别保存了线程堆栈中的入口函数地址和NTDLL.dll中的RtlUserThreadStart函数地址,该函数用来执行线程代码