文档库 最新最全的文档下载
当前位置:文档库 › DLL基础

DLL基础

DLL基础
DLL基础

Windows API的所有函数都包含在DLL中,其中3个最重要的DLL是:

kernel32.dll:包含管理内存、进程和线程额函数

user32.dll:包含处理用户界面任务的一些函数

GDI32.dll:包含绘制图形和显示文本的函数

1、DLL与进程的地址空间

DLL包含一组可以被任何应用所使用的自治函数。在DLL中通常没有支持处理消息循环或创建窗口的代码。

一个DLL只是一组源代码模块的集合。其中每个模块包含应用程序(可执行代码)或者另一个DLL将要调用的一组函数。

在应用程序可以调用DLL中的函数之前,DLL文件映像必须映射到调用进程的地址空间:隐式的装载时链接或显示的运行时链接。

一旦DLL中的文件映像映射到调用进程的地址空间,则DLL中的所有函数对于运行在该进程内的所有进程都是可用的。DLL几乎失去了它作为DLL的所有特殊性标识。

2、DLL的运行情况

可执行模块和DLL之间如何实现隐式的装载时链接。

创建一个DLL的步骤:

1)创建一个头文件,该头文件中包含将要从DLL中导出的函数原型,结构以及符号。

2)创建一个或者多个C++源代码模块,以实现想要在DLL模块中实现的函数和变量。(这

些源代码模块对于创建一个可执行模块是不需要的)

3)创建DLL模块:用编译器来处理每个源代码模块,生成一个.obj模块(每个源代码模

块对应一个.obj模块)

4)当所有的.obj模块生成完后,链接程序将所有的.obj模块的内容组合在一起,生成一个

单独的DLL映像文件。(包含用于DLL的所有二进制代码和全局、静态变量)

5)如果链接程序检测到DLL得源代码模块至少导出了一个函数或者变量,则链接程序同

时生成一个单独的.Lib文件。

以上即建立好了DLL模块。现在创建可执行模块。

6)在所有引用函数,变量,数据结构或者符号的源代码模块中,必须要包含创建DLL时

所建立的头文件。

7)创建一个或者多个C++源代码模块,用以实现想要在可执行模块中实现的函数和变量。

8)创建可执行模块。用编译器来处理每个源代码模块,生成一个.obj模块。(每个源代码

模块对应一个.obj模块)

9)当所有的.obj模块生成完后,链接程序将所有的.obj模块的内容组合在一起,生成一个

单独的可执行映像文件。该执行模块包含一个导入部分,列出该执行模块所需要的所有DLL模块的名字。

这时,建立好DLL和可执行模块之后,一个进程即可以执行。当试图运行一个可执行模块时,操作系统的装载程序执行以下步骤:

10)装载程序为新的进程创建一个虚拟地址空间。可执行模块被映射到新进程的地址空间。

装载程序解析可执行模块的导入部分。对于在导入部分列出的每个DLL名,装载程序在用户系统中定位DLL模块,并将DLL映射到进程的地址空间。

当可执行模块和DLL全部导入新进程的地址空间之后,进程的主线程开始执行。

3.DLL高级技术

可执行模块和DLL之间如何实现显式的运行时链接。

当应用程序运行时,其中的一个线程可以决定它将要调用DLL的一个函数。该线程能够显式地将DLL加载带进程的地址空间,并获得包含在DLL中函数的虚拟内存地址,然后使用该内存地址调用函数。

前十步与隐式调用DLL一致,只是在最后:

线程调用loadlibrary(EX)来将DLL加载到进程的地址空间。线程可能有getprocaddress 来间接地引用DLL导出的符号。

1)显式加载DLL模块

●Loadlibrary()

Loadlibrary(lpLibFileName String)参数为指定要载入的动态链接库的名称

作用:载入指定的动态链接库,并将它映射到当前进程使用的地址空间。一旦载入,即可访问库内保存的资源

返回值:Long,成功则返回库模块的句柄,零表示失败。会设置GetLastErro

●LoadlibraryEx()

2)显式卸载DLL模块

Freelibrary()

3)显式链接到导出符号

Getprocaddress()

3、DLL的入口函数

注册、反注册dll,regsvr32命令详解

这里有很多Regsvr32命令,看了后就明白了 Regsvr32命令修复系统故障实例使用过activex的人都知道,activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册,但如果你拿到的一个控件需要手动注册怎么办呢?如果修改注册表那就太麻烦了,在windows 的system文件夹下有一个regsvr32.exe的程序,它就是windows自带的activex注册和反注册工具。 2000系统的regsvr32.exe在winnt\system32文件夹下; WInXP系统的regsvr32.exe在windows\system32文件夹下 regsvr32的用法为: "regsvr32 [/s] [/n] [/i(:cmdline)] dllname”。其中dllname为activex 控件文件名,建议在安装前拷贝到system文件夹下。 参数有如下意义: /u——反注册控件 /s——不管注册成功与否,均不显示提示框 /c——控制台输出 /i——跳过控件的选项进行安装(与注册不同) /n——不注册控件,此选项必须与/i选项一起使用 执行该命令的方法: 1、可以在“开始”--“运行”,调出运行的对话框,也可以使用Win+R热键,然后直接在输入栏输入即可 2、在开始--运行输入cmd,调出‘命令提示符’窗口,然后再执行regsvr32命令。 二、Regsvr32错误消息的说明 当使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。 以下列表介绍了 RegSvr32 错误消息和可能的原因。 Unrecognized flag:/invalid_flag 键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。No DLL name specified. 未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. Dllname不是.dll 或.ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。

Win7获得权限替换System32文件夹里dll文件的方法

Win7获得权限替换System32文件夹里dll文件的方法: 1、打开记事本,输入下列文本: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\runas] @="获取权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\*\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" [HKEY_CLASSES_ROOT\Directory\shell\runas] @="获取权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\Directory\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t" 2、然后保存为导入.reg文件; 3、然后双击导入.reg; 此时会弹出警告提示,允许程序通过即可; 4、然后选择System32文件夹,鼠标右键选择获取权限。

dll编程入门(C++语言)

C++下的DLL编程入门 一、编写第一个入门级dll文件 1. 新建一个dlltest的dll工程,加入一源文件dlltest.cpp,包含add和subtract两个函数如下: _declspec(dllexport)int add(inta,int b) { returna+b; } _declspec(dllexport)int subtract(inta,int b) { return a-b; } //---------------------------------------------------------------- 注意: 在函数名前加上_declspec(dllexport),这样编译后在连接的时候才会生成dlltest.lib (引入库文件)和dlltest.exp(输出库文件),并且在命令提示符下用dumpbin命令可以看到导出了哪些函数。 方法:在命令提示符下,转到dll文件所在目录下,输入dumpbin–exports dlltest.dll,列出导出函数如下: 这里注意到函数名字已经被改成了?add@@YAHHH@Z,这种现象叫做名字粉碎,是为了支持函数重载而做的。 2.编写一个基于对话框的MFC程序测试DLL,工程名为calldll,放置两个按纽add和subtract,响应按纽消息,调用这个DLL的add和subtract函数。 先添加响应按钮消息的函数OnAdd和OnSubtract,然后在函数所在源文件中写完整函数体如下: //extern intadd(int,int); //extern intsubtract(int,int); _declspec(dllimport)int add(int,int); _declspec(dllimport)int subtract(int,int); voidCCalldllDlg::OnAdd() {

Java多线程技术及案例

Java多线程技术及案例 进程和线程: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。 线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 多进程是指操作系统能同时运行多个任务(程序)。 多线程是指在同一程序中有多个顺序流在执行。 Java中多线程的多种实现方式 Java中有多种多线程实现方法,主要是继承https://www.wendangku.net/doc/2711951316.html,ng.Thread类的方法和 https://www.wendangku.net/doc/2711951316.html,ng.Runnable接口的方法。 继承Thread类 Thread是https://www.wendangku.net/doc/2711951316.html,ng包中的一个类,从这个类中实例化的对象代表线程,启动一个新线程需要建立一个Thread实例。 使用Thread类启动新的线程的步骤如下: 1.实例化Thread对象 2.调用start()方法启动线程 构造方法:

public Thread(String threadName); public Thread(); 例程: publicclass Thread1extends Thread{//定义一个类继承Thread privateint count=1000; publicvoid run(){//重写run方法 while(true){ System.out.print(count+" "); if(--count==0){ return; } } } publicstaticvoid main(String[] args){ Thread1 th1=new Thread1();//实例化继承了Thread的类 Thread1 th2=new Thread1(); th1.start();//调用start()方法, th2.start(); for(int i=0;i<1000;i++){ System.out.print("A "); } }

利用RegSvr32来注册.NET COM组件

利用RegSvr32来注册.NET COM组件 ?背景 前一段时间由于业务关系,须要在一个比较旧的系统编写一个补丁。原系统使用VB编程,但如果要使用VB来实现这个补丁的内容,对于我这个并不怎么接触VB的人来说太头痛了。由于平时使用的是C#来开发,于是便想到能否用编写.NET COM组件的方式来让VB调用。想到这两三下便写了个.NET COM 测试组件,用VB测试调用测试OK。接下来就是进行后续的开发,可等到开发完成后到了补丁打包环节却傻眼了。原来的补丁打包工具在诞生时还不知道.NET为何物,所以根本没有使用RegAsm来注册.NET COM组件的功能。现在更改打补丁工具那是不现实的,可要使得VB调用.NET COM又必须使用RegAsm 注册,这下怎么办呢? ?解决方式 原打包工具是支持使用RegSvr32来注册Com组件的,忽然想到能否使用RegSvr32来注册.NET COM组件呢?印象中regsvr32在注册DLL的时候会有个CallBack函数的,于是赶紧Google找找相关资料最终解决了这个问题。主要原理是写一个代理的dll,在这个DLL的注册响应函数DllRegisterServer里调用RegAsm来注册.NET COM,同理在DllUnregisterServer里反注册。 ?代理DLL代码 stdafx.h #pragma once #include #include Register.cpp /*---------------------------------------------- 此组件主要解决C#编写的COM组件无法用RegSvr32注册的问题 原理是增加一个代理DLL,在代理DLL注册时,响应DllRegisterServer注册函数, 在响应函数中使用RegAsm来注册.Net Com组件,反注册同理。 ----------------------------------------------*/ #include "stdafx.h" #define MAX_PATH 260 //全局变量,存放注册代理dll路劲 TCHAR g_FilePath[MAX_PATH]; BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { //记录代理DLL的路径,主要是为了方便后面获取代理DLL所在目录 GetModuleFileName(hModule, g_FilePath, 255);

dll文件打开方式

一、DLL文件常识DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。DLL文件一般被存放在C:WindowsSystem目录下 二、修改DLL文件的具体应用在系统的组策略和注册表中,我们可以修改一些键值来优化我们的系统,并加强操作系统的安全性。可是,对于限制下载、禁止删除文件等功能,我们无法通过上述的操作来完成,这只有通过修改系统DLL文件来实现。目前,我们通过修改系统的DLL文件,可以实现禁止删除文件、禁止IE下载、禁止IE另存为、禁止文件打开方式等功能。 三、系统中部分DLL文件的功能1、Browselc.dll IE所需要调用的库文件DLL结构雏形就是它了2、Shdoclc.dll 系统窗口及设置等,如删除文件、重命名3、Shell32.dll 系统窗口及设置等,如删除文件、重命名4、Cryptui.dll IE控件下载及提示对话框程序 四、修改DLL文件的方法1、下载DLL文件修改工具EXESCOPE6.0 - 6.3或6.4工具2、获取Browselc.dll、Shdoclc.dll、Shell32.dll和Cryptui.dll这几个链接文件。在找这几个文件时,最好将其他机器的硬盘,挂接在本机中,然后用本机的操作系统启动并复制这几个文件。3、在修改DLL文件的时候,打开该键值,在右面的对话框中将所要修改的键值禁用即可,不要删除,以备日后恢复(如图) 五、DLL文件修改秘籍1、禁止下载的修改方法: 打开Shdoclc.dll修改资源--对话框---4416,将4416键值禁用即可。2、禁止网页添加到收藏夹,打开Shdoclc.dll修改资源--对话框---21400,将该键值禁用即可。3、禁止恶意网页加载控件,修改Cryptui.dll文件,要同时修改5个地方才能完全禁止资源--对话框---130 资源--对话框---230 资源--对话框---4101 资源--对话框---4104 资源--对话框---4107 将以各对话框中的相应键值,修改成为禁用就可以了。4、禁止系统删除文件修改Shell32.dll,这个文件需要修改5个地方才可以禁止系统删除文件。资源--对话框---1011 资源--对话框---1012 资源--对话框---1013 资源--对话框---1021 资源--对话框---1022 将以上五个地址的键值禁用就可以了! 5、禁止文件被改名,修改shell32.dll,有2个地方需要修改资源--对话框---1018 资源--对话框---1019 将以上两处的相应键值,修改为禁用就可以了! 6、禁止运行菜单,修改shell32.dll,将资源--对话框---1018键值设置为禁用。7、禁止系统文件被挪动修改shell32.dll,需要修改4个地方资源--对话框---1014 资源--对话框---1015 资源--对话框---1016 资源--对话框---1017 8、禁止目标另存为,修改Shdoclc.dll文件,需要修改3个地方资源--菜单--258---257 资源--菜单--258---252 资源--菜单--24641--2268 在这个修改中,我们要把各对应的键值删除。打开该键值后,右键菜单中有删除。在资源--菜单--24641-2268中,有多项该键值,请逐一删除。9、禁止自定义文件夹选项修改Shell32.dll文件,需要修改以下4个地方资源--菜单--215---28719 资源--菜单--216---28719 资源--菜单--217---28719 资源--菜单--216---28719 找到以上四处键值,直接需要删除后即可,而不是禁用。10、禁止IE文件夹选项,修改Browselc.dll文件,需要修改3个键值资源--菜单--263 (这里有多个请删除)---41251(删除) 资源--菜单--266(也有多个请删除)---41329 (删除) 资源--菜单--268---41251 (删除) 在上面的3个键值中,个别键值有多处,请逐一删除。11、禁止98文件共享控件,修改Msshrui.dll,需要修改2个地方资源---对话框---- 1 --- AutoRadioButton 资源---对话框---- 30 --- AutoRadioButton 将以上两处的键值禁

lib和dll文件的区别和联系

(1)lib是编译时需要的,dll是运行时需要的。 如果要完成源代码的编译,有lib就够了。 如果也使动态连接的程序运行起来,有dll就够了。 在开发和调试阶段,当然最好都有。 (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 (3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。 一、开发和使用dll需注意三种文件 1、 dll头文件 它是指dll中说明输出的类或符号原型或数据结构的.h文件。当其它应用程序调用dll时,需要将该文件包含入应用程序的源文件中。 2、 dll的引入库文件 它是dll在编译、链接成功后生成的文件。主要作用是当其它应用程序调用dll时,需要将该文件引入应用程序。否则,dll无法引入。 3、 dll文件(.dll) 它是应用程序调用dll运行时,真正的可执行文件。dll应用在编译、链接成功后,.dll文件即存在。开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,不必有.lib文件和dll头文件。 动态链接库 (DLL) 是作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。 动态链接与静态链接的不同之处在于:动态链接允许可执行模块(.dll 文件或 .exe 文件)仅包含在运行时定位 DLL 函数的可执行代码所需的信息。在静态链接中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。 使用动态链接代替静态链接有若干优点。DLL 节省内存,减少交换操作,节省磁盘空间,更易于升级,提供售后支持,提供扩展 MFC 库类的机制,支持多语言程序,并使国际版本的创建轻松完成。 lib与dll文件最大区别在调用方面 dll可以静态陷入 lib与DLL 从这一章起,我讲述的内容将特定于windows平台。其实这篇文章也可看作是我在windows下的开发经验总结,因为以后我决定转unix了。 前面有一章说编译与链接的,说得很简略,其实应该放到这一章一块儿来说的。许多单讲

dll文件查看方法

步骤1 检测壳 壳的概念: 所谓“壳”就是专门压缩的工具。 这里的压缩并不是我们平时使用的RAR、ZIP这些工具的压缩,壳的压缩指的是针对exe、com、和dll等程序文件进行压缩,在程序中加入一段如同保护层的代码,使原程序文件代码失去本来面目,从而保护程序不被非法修改和反编译,这段如同保护层的代码,与自然界动植物的壳在功能上有很多相似的地方,所以我们就形象地称之为程序的壳。 壳的作用: 1.保护程序不被非法修改和反编译。 2.对程序专门进行压缩,以减小文件大小,方便传播和储存。 壳和压缩软件的压缩的区别是 压缩软件只能够压缩程序 而经过壳压缩后的exe、com和dll等程序文件可以跟正常的程序一样运行 下面来介绍一个检测壳的软件 PEID v0.92 这个软件可以检测出 450种壳 新版中增加病毒扫描功能,是目前各类查壳工具中,性能最强的。 另外还可识别出EXE文件是用什么语言编写的VC++、Delphi、VB或Delphi等。支持文件夹批量扫描 我们用PEID对easymail.exe进行扫描 找到壳的类型了 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 说明是UPX的壳 下面进行 步骤2 脱壳 对一个加了壳的程序,去除其中无关的干扰信息和保护限制,把他的壳脱去,解除伪装,还原软件本来的面目。这个过程就叫做脱壳。 脱壳成功的标志 脱壳后的文件正常运行,功能没有损耗。 还有一般脱壳后的文件长度都会大于原文件的长度。 即使同一个文件,采用不同的脱壳软件进行脱壳,由于脱壳软件的机理不通,脱出来的文件大小也不尽相同。 关于脱壳有手动脱壳和自动脱壳 自动脱壳就是用专门的脱壳机脱很简单按几下就 OK了 手动脱壳相对自动脱壳需要的技术含量微高这里不多说了

java多线程实现调度

重庆交通大学综合性设计性实验报告 实验项目名称:进程调度(先来先服务) 实验项目性质: JAVA多线程 实验所属课程: JAVA程序设计 实验室(中心):语音大楼 8 楼 801 班级:软件专业 2012级2班 姓名:尚亚* 学号: 631206050216 指导教师:杨 实验完成时间: 2014 年 11 月 25 日

一、实验目的 1、理解程序、线程和进程的概念; 2、理解多线程的概念; 3、掌握线程的各种状态; 4、熟练使用Thread类创建线程; 5、熟练使用线程各种方法; 6、掌握线程的调度及线程同步的实现原理。 二、实验内容及要求 进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 用JA V A语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。做一个能够直观体现多个进程时,CPU 是怎样调度就绪队列中的进程(按照先来先服务的原则)。

三、实验设备 PC机,windows7,eclipse。 四、设计方案 ㈠设计主要思想 (1)要模拟进程的调度算法,必须先体现处进程及系统资源。 (2)要体现先来先服务的算法,就必须表现出当有一个进程进入CPU时其他进程不能进入,并在就绪队列中排队。本实验建立了四个圆移动的线程表示作业调度,用圆在表示就绪队列的方框中停留表示进程在就绪队列中排队。 (3)当有一个圆移动到表示CPU的范围内时,让其它线程在就绪队列中排队,当CPU内无进程时,先来的圆先移动,以表示CPU 对进程的调度。 ㈡设计的主要步骤 (1)建立四个不同颜色的圆移动的线程,表示对四个进程的调度。 (2)当有一个表示进程的圆到达表示CPU范围内时,通过让其它几个圆停留在表示就绪队列的方框范围内,表示进程在就绪队列中排成队列。 (3)当第一个先到达的进程释放CPU,在排成队列的几个圆中选择先到达的圆,使其移动表示对先来的进程进行调度,直到所有的圆移动完毕。 五、主要代码 import java.awt.Font; import java.awt.event.*;

如何注册DLL文件

将您下载的"*. DLL" 文件复制到"C:\Windows\system32\" 系统目录下然后按"Win键+R" 或单击"开始"->"运行" 输入"regsvr32 *.dll" 命令注册到系统文件。适用于Windows95/98/xp/2000/vista/win7. 如何注册Windows\system32\下的所有.dll和.ocx文件? 在开始->运行(win+r)下输入命令: cmd /c for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i cmd /c for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i Regsvr 32命令详解(DLL、OCX、CPL文件的注册和反注册工具) Regsvr 32命令是Windows中控件文件(如扩展名为DLL、OCX、CPL的文件)的注册和反注册工具。 命令格式: Regsvr32 [/s] [/n] [/i[:cmdline]] dllname /u 卸载安装的控件,卸载服务器注册; /s 注册成功后不显示操作成功信息框; /i 调用DllInstall函数并把可选参数[cmdline]传给它,当使用/u时用来卸载DLL;/n 不调用DllRegisterServer,该参数必须和/i一起使用。 实例当你运行一个软件,WINDOWS出现出错窗口,提示为*.DLL文件或者*.OCX 文件找不到,可是搜索一下,这个文件就在C:\WINDOWS\SYSTEM目录中.为什么呢?这是因为这个文件没有在WINDOWS中注册.也就是说WINDOWS还不认识它.假设你要注册的是abc.dll.选择"开始--运行"然后输入“regsvr32 abc.dll”,如果弹出提示信息“DllRegisterServerin Wupdinfo.dll succeeded”,说明组件注册成功;失败一般会出现“LoadLibrary("svchost.dll")失败-找不到指定的模块”,如果要卸载此组件,在“开始→运行”中键入“Regsvr32 /u Wupdinfo.dll ”即可。 实例1:IE无法打开新窗口regsvr32 actxprxy.dll regsvr32 shdocvw.dll 重启后如果还不能解决regsvr32 mshtml.dll regsvr32 urlmon.dll regsvr32 msjava.dll regsvr32 browseui.dll regsvr32 oleaut32.dll regsvr32 shell32.dll 实例2:IE无法保存HTML格式文件regsvr32 inetcomm.dll 实例3:MSN无法登陆regsvr32 softpub.dll 实例4:windows默认的文件关联混乱regsvr32 /i shdocvw.dll regsvr32 /i shell.dll regsvr32 /i shdoc401.dll 实例5:Window server 2003中无法播放MP3 regsvr32 i3codeca.acm regsvr32 i3codecx.ax 实例6:Windows添加/删除程序无法启动regsvr32 mshtml.dll regsvr32 /i shdocvw.dll regsvr32 /i shell.dll 实例7:Windows搜索功能故障regsvr32 urlmon.dll 实例8:禁止系统对媒体文件进行预览regsvr32 /u shmedia.dll

Java第七单元练习题Java多线程机制

J a v a第七单元练习题 J a v a多线程机制 The latest revision on November 22, 2020

7Java多线程机制 7.1单项选择题 1. 线程调用了sleep()方法后,该线程将进入()状态。 A. 可运行状态 B. 运行状态 C. 阻塞状态 D. 终止状态 2. 关于java线程,下面说法错误的是() A. 线程是以CPU为主体的行为 B. java利用线程使整个系统成为异步 C. 创建线程的方法有两种:实现Runnable接口和继承Thread类 D. 新线程一旦被创建,它将自动开始运行 3. 在java中的线程模型包含() A. 一个虚拟处理器 B. CPU执行的代码 C. 代码操作的数据 D. 以上都是 4.在java语言中,临界区可以是一个语句块,或者是一个方法,并用()关键字标识。 A. synchronized B. include C. import D. Thread 5. 线程控制方法中,yield()的作用是() A. 返回当前线程的引用 B. 使比其低的优先级线程执行 C. 强行终止线程 D. 只让给同优先级线程运行 6. 线程同步中,对象的锁在()情况下持有线程返回 A. 当synchronized()语句块执行完后 B. 当在synchronized()语句块执行中出现例外(exception)时 C. 当持有锁的线程调用该对象的wait()方法时 D. 以上都是 7. 在以下()情况下,线程就进入可运行状态 A. 线程调用了sleep()方法时 B. 线程调用了join()方法时 C. 线程调用了yield()方法时 D. 以上都是 8. java用()机制实现了进程之间的异步执行

dll文件怎么打开和eXeScope的使用方法及其修改

eXeScope的使用方法及其修改 一、eXeScope的几种使用方法 修改系统DLL文件实现禁用 首先引导下系统主要的些dll 基本上只要修改它们就可以实现很高的安全性首先请没改过DLL的朋友请下载个 EXESCOPE6.3 - 6.4工具 1.Browselc.dll IE所需要调用的库文件DLL 结构雏形就是它了 2.Shdoclc.dll 系统窗口及设置对话框等等........ 比如删除文件重命名. 3.Shell32.dll 和上面是同类的 4.Explorer.exe 开始菜单调用的程序 ......系统就上加载他进系统 5.Cryptui.dll IE控件下载提示对话筐程序 现在我们就讲下任何修改这些程序来达到禁止的目的 一 1. 禁止下载打开 Shdoclc.dll 修改资源--对话框---4416 2. 禁止网页添加到收藏夹 Shdoclc.dll 修改资源--对话框---21400 EXESCOPE工具右边有个“禁用”的选项用这个功能把要点确定的地方禁止掉 就可以不用把确定键给删除如果以后要恢复也方便 二 1. 禁止恶意网页加载控件 Cryptui.dll 修改要同时修改5个地方才能完全禁止 资源--对话框---130 资源--对话框---230 资源--对话框---4101 资源--对话框---4104 资源--对话框---4107 三

1.禁止系统删除 Shell3 2.dll 修改5个地方 资源--对话框---1011 资源--对话框---1012 资源--对话框---1013 资源--对话框---1021 资源--对话框---1022 2. 禁止文件被改名修改 2个地方 资源--对话框---1018 资源--对话框---1019 3. 禁止运行菜单 资源--对话框---1018 4. 禁止系统文件被挪动修改3个地方 资源--对话框---1014 资源--对话框---1015 资源--对话框---1016 资源--对话框---1017 四禁止目标另存为 修改 Shdoclc.dll 文件 以下3个地方 1 资源--菜单--258---257 (删除) 2 资源--菜单--258---252 (删除) 3 资源--菜单--24641--2268 (删除这里有多项相同的删除就可以了) 五禁止自定义文件夹选项 修改 Shell32.dll 文件 以下4个地方 1 资源--菜单--215---28719 (删除) 2 资源--菜单--216---28719 (删除) 4 资源--菜单--217---28719 (删除) 5 资源--菜单--216---28719 (删除) 六禁止IE文件夹选项 修改 Browselc.dll 文件 1 资源--菜单--263 (这里有多个请删除)---41251(删除) 2 资源--菜单--266( 也有多个请删除)---41329 (删除) 3 资源--菜单--268---41251 (删除) 七. 禁止98 文件共享控件

dll注册说明

一、注册dll 首先安装VS2010 在开始菜单中选择Visual Studio命令提示 使用cd命令选择存放dll的文件夹 使用gacutil /i 命令加载dll 使用regasm命令注册dll文件 若程序编译环境和使用环境不同,请为这两个环境均做上述操作,注册dll

二、dll文件说明 本文件中封装了三个方法 SetDataBaseConnectString(string connectionStr) 该方法用于输入数据库连接字符串 AddCuiHuoData(float dianya, float dianliu, float gonglv, float nengliang, float shijian,string zuhao, string lingjianbianma, string gongzhuangbianhao, string xingming, string gongwei, string nengliangzhuangtai, string dianyuan) 该方法用于设备工艺数据录入数据库,返回值为int型,为0时表示传输正常,为-1时表示传输错误。 AddCuiHuoDevPara(float CuiHuoWaterTemp, float CoolingWaterTemp, int SingleBeat, i nt CombineBeat, int SingleCount, int CombineCount, int Sum, int TotalSingleCount , int TotalCombineCount, int TotalSum, bool DevJerk,bool HasPart, bool PowerOn , bool JOG, bool AutoSingleRun, bool AutoCombineRun, bool AutoSingleMode, bool AutoCombineMode, bool UnloadRequire, bool UnloadComplete, bool LoadRequire, bool LoadComplete, bool FirstCoolingWarn, bool SecondCoolingWarn, bool ThirdCoolingWar n, bool FouthCoolingWarn, bool FifthCoolingWarn,bool SixCoolingWarn, bool Sevent hCoolingWarn, bool EightCoolingWarn, bool CoolingTempWarn, bool CuiHuoTempWarn,bo ol PressWarn, bool SmoothWarn, bool FirstDianYuanCoolingWarn, bool SecondDianYua nCoolingWarn, bool ThirdDianYuanCoolingWarn, bool EnergyWarn) 该方法用于设备参数数据录入数据库,返回值为int型,为0时表示传输正常,为-1时表示传输错误。 三、使用dll中的方法 Private Sub WriteInDB_Click() Dim rev1 As Integer Dim rev2 As Integer

dll文件编写

.dll文件编写 悬赏分:0 |解决时间:2006-5-20 14:56 |提问者:lzpyake 最佳答案 DLL是一种特殊的可执行文件。说它特殊主要是因为一般它都不能直接运行,需要宿主程序比如*.EXE程序或其他DLL的动态调用才能够使用。简单的说,在通常情况下DLL是经过编译的函数和过程的集合。 使用DLL技术主要有以下几个原因: 一、减小可执行文件大小。 DLL技术的产生有很大一部分原因是为了减小可执行文件的大小。当操作系统进入Windows时代后,其大小已经达到几十兆乃至几百兆。试想如果还是使用DOS 时代的单执行文件体系的话一个可执行文件的大小可能将达到数十兆,这是大家都不能接受的。解决的方法就是采用动态链接技术将一个大的可执行文件分割成许多小的可执行程序。 二、实现资源共享。 这里指的资源共享包括很多方面,最多的是内存共享、代码共享等等。早期的程序员经常碰到这样的事情,在不同的编程任务中编写同样的代码。这种方法显然浪费了很多时间,为了解决这个问题人们编写了各种各样的库。但由于编程语言和环境的不同这些库一般都不能通用,而且用户在运行程序时还需要这些库才行,极不方便。DLL的出现就像制定了一个标准一样,使这些库有了统一的规范。这样一来,用不同编程语言的程序员可以方便的使用用别的编程语言编写的DLL。另外,DLL还有一个突出的特点就是在内存中只装载一次,这一点可以节省有限的内存,而且可以同时为多个进程服务。 三、便于维护和升级。 细心的朋友可能发现有一些DLL文件是有版本说明的。(查看DLL文件的属性可以看到,但不是每一个DLL文件都有)这是为了便于维护和升级。举个例子吧,早期的Win95中有一个BUG那就是在闰年不能正确显示2月29日这一天。后来,Microsoft发布了一个补丁程序纠正了这个BUG。值得一提的是,我们并没有重装Win95,而是用新版本的DLL代替了旧版本的DLL。(具体是哪一个DLL文件笔者一时想不起来了。)另一个常见的例子是驱动程序的升级。例如,著名的DirectX就多次升级,现在已经发展到了6.0版了。更妙的是,当我们试图安装较低版本的DLL时,系统会给我们提示,避免人为的操作错误。例如我们升级某硬件的驱动程序时,经常碰到Windows提示我们当前安装的驱动程序比原来的驱动程序旧。 四、比较安全。

Java多线程和网络编程项目

Megan package MultiTCP; import java.io.DataOutputStream; import java.io.IOException; import https://www.wendangku.net/doc/2711951316.html,.ServerSocket; import https://www.wendangku.net/doc/2711951316.html,.Socket; /** * 必须先启动再连接 * 1、创建服务器指定端口ServerSocket(int port) * 2、接收客户端的连接阻塞式 * 3、发送数据+接收数据 * * 接收多个客户端 */ @SuppressWarnings("all") public class MultiServer { public static void main(String[] args) throws IOException { //1、创建服务器指定端口 ServerSocket server = new ServerSocket(8888); while(true)//死循环一个accept 一个客户端 { //2、接收客户端的连接 Socket socket = server.accept(); System.out.println("一个客户端建立连接"); //2、发送数据 String msg = "欢迎使用"; //3、输出流 /*BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())); bw.write(msg); bw.newLine();//一定要加行结束符,不然读不到数据 bw.flush();*/ DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(msg); dos.flush(); } } } package MultiTCP; import java.io.DataInputStream;

没有找到DLLRegisterServer输入点,无法注册这个文件 的解决方法

没有找到DLLRegisterServer输入点,无法注册这个文件的解决方法(建议用方法一) 运行时错误‘429’,ACTIVEX部件不能创建对象、没有找到DLLRegisterServer 输入点,无法注册这个文件的解决方法 方法1(一般在运行里输入regsvr32 scrrun.dll 按确定即可解决) 如果是某组件没有注册成功,可以使用下面的方法进行手动处理: 开始->运行regsvr32 "C:\*\*\……\*.dll" 注册后就可以使用。你也可以在自己的电脑上进行反注册,在前面加上/u参数即可。 如果还有类似提示,regsvr32 "C:\windows\system32\scrrun.dll",注册后即可。 方法2 把以下内容做成批处理运行 echo 正在修复,这个过程可能需要几分钟,请稍候…… rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%\System32\dacui.dll rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%\Catroot\icatalog.mdb regsvr32 /s comcat.dll regsvr32 /s asctrls.ocx regsvr32 /s oleaut32.dll regsvr32 /s shdocvw.dll /I regsvr32 /s shdocvw.dll regsvr32 /s browseui.dll regsvr32 /s browseui.dll /I regsvr32 /s msrating.dll regsvr32 /s mlang.dll regsvr32 /s hlink.dll regsvr32 /s mshtml.dll regsvr32 /s mshtmled.dll regsvr32 /s urlmon.dll regsvr32 /s plugin.ocx regsvr32 /s sendmail.dll

java多线程并发面试题【java多线程和并发基础面试题】

java多线程并发面试题【java多线程和并 发基础面试题】 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。下面就由小编为大家介绍一下java多线程和并发基础面试题的文章,欢迎阅读。 java多线程和并发基础面试题篇1 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的来创建和驻留在进程中,并且可以共享进程中的。 2. 多线程编程的好处是什么? 在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待而进入空闲状态。多个线程共享堆内存(heap memory),因此创建多个线程去执行一些任务会比创建多个进程更好。举个例子,Servlets比CGI更好,是因为Servlets支持多线程而CGI不支持。 3. 用户线程和守护线程有什么区别? 当我们在Java程序中创建一个线程,它就被称为用户线程。一个守护线程是在后台执行并且不会阻止JVM终止的

线程。当没有用户线程在运行的时候,JVM关闭程序并且退出。一个守护线程创建的子线程依然是守护线程。 4. 我们如何创建一个线程? 有两种创建线程的方法:一是实现Runnable接口,然后将它传递给Thread的构造函数,创建一个Thread对象;二是直接继承Thread类。 java多线程和并发基础面试题篇2 1. 有哪些不同的线程生命周期? 当我们在Java程序中新建一个线程时,它的状态是New。当我们调用线程的start()方法时,状态被改变为Runnable。线程调度器会为Runnable线程池中的线程分配CPU时间并且讲它们的状态改变为Running。其他的线程状态还有Waiting,Blocked 和Dead。 2. 可以直接调用Thread类的run()方法么? 当然可以,但是如果我们调用了Thread的run()方法,它的行为就会和普通的方法一样,为了在新的线程中执行我们的代码,必须使用Thread.start()方法。 3. 如何让正在运行的线程暂停一段时间? 我们可以使用Thread类的Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为Runnable,并且根据线程调度,它将得到执行。

相关文档