Windows下DLL编程技术及应用

摘 要: 本文介绍了DLL技术在Windows编程中的基本运用方法及应用,给出了直接内存访问及端口I/O的两个实用DLL的全部源代码。

关键词: DLL Windows编程 内存访问 I/O

一 、引 言

由于Windows为微机提供了前所未有的标准用户界面、图形处理能力和简单灵便的操作,绝大多数程序编制人员都已转向或正在转向Windows编程。在许多用户设计的实际应用系统的编程任务中,常常要实现软件对硬件资源和内存资源的访问,例如端口I/O、DMA、中断、直接内存访问等等 。若是编制DOS程序,这是轻而易举的事情,但要是编制Windows程序,尤其是WindowsNT环境下的程序,就会显得较困难。

因为Windows具有"与设备无关"的特性,不提倡与机器底层的东西打交道,如果直接用Windows的 API函数或I/O读写指令进行访问和操作,程序运行时往往就会产生保护模式错误甚至死机,更严重的情况会导致系统崩溃。那么在Windows下怎样方便地解决上述问题呢?用DLL(Dynamic Link Libraries)技术就是良好途径之一。

DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来实现的,因此掌握它、应用它是非常重要的。其实Windows本身就是由许多的DLL组成的,它最基本的三大组成模块Kernel、GDI和User 都是DLL,它所有的库模块也都设计成DLL。凡是以.DLL、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都是DLL,要是打开Windows\System目录,就可以看到许多的DLL模块。尽管DLL在Ring3优先级下运行,仍是实现硬件接口的简便途径。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式,减少了编程设计上的不便;同时,一个DLL在内存中只有一个实例,使之能高效经济地使用内存;DLL实现的代码封装性,使得程序简洁明晰;此外还有一个最大的特点,即DLL的编制与具体的编程语言及编译器无关,只要遵守DLL的开发规范和编程策略,并安排正确的调用接口,不管用何种编程语言编制的DLL都具有通用性。例如在BC31中编制的DLL程序,可用于BC、VC、VB、Delphi等多种语言环境中。笔者在BC31环境下编译了Windows下直接内存访问和端口I/O两个DLL,用在多个自制系统的应用软件中,

时间: 2024-10-28 11:44:28

Windows下DLL编程技术及应用的相关文章

c++-如何在windows下C++编程实现循环发送定长数据包?

问题描述 如何在windows下C++编程实现循环发送定长数据包? 为了对内部网络进行相关测试,所以要用C++编程实现一个循环发包程序,用QT平台进行开发,要发送的数据包都是同样大小,且大小由用户自行设置,用户设置的大小是整个数据包的大小,包括Ip头等等.所以想请问一下这个要用什么实现?rawsocket可以吗? 解决方案 http://www.cnblogs.com/shenck/p/4075141.html

关于windows下socket编程的recv函数

问题描述 关于windows下socket编程的recv函数 Talk is cheap,show me the code. do{ memset(buf, 0, BUFSIZ); strLen = recv(reads.fd_array[i], buf, BUFSIZ - 1, 0); if (strLen == 0 || strLen == -1){ FD_CLR(reads.fd_array[i], &reads); closesocket(cpyReads.fd_array[i]); p

JAVA调用windows下dll文件程序代码

JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C.C++代码,尤其是底层库文件(windows中叫dll文件,linux下是so[shared object]文件). JNI是Java调用原生函数的唯一机制,JNA就是建立在JNI之上,JNA简化了Java调用原生函数的过程.JNA提供了一个动态的C语言编写的转发器(实际上也是一个动态链接库,在Linux-i386中文件名是:libjnidispatch.so)可以自动实现Java与C

CentOS虚拟机如何设置共享文件夹并在Windows下映射网络驱动器

一.为什么要这么做? 最近在做Linux下的软件开发,但又想使用Windows下的编程工具"Source Insight". 二.安装环境 本机系统:Windows 7 旗舰版 VMware:VMware Workstation 9.0 CentOS:CentOS 6.4 网络适配器设置为:NAT 转换 三.查看是否已经安装"samba" 命令:rpm -qa|grep samba 输出结果: samba-client-3.0.33-3.28-1.el5 samba

iocp-windows下IOCP编程的问题

问题描述 windows下IOCP编程的问题 描述在下面的文章中:http://blog.csdn.net/u010826760/article/details/50822170 没分,谢谢各位.. 解决方案 http://www.cnblogs.com/simonhaninmelbourne/archive/2012/09/22/2697761.html

windows-linux与Windows下不同头文件的对应关系

问题描述 linux与Windows下不同头文件的对应关系 最近在学习"C语言基于socket多人聊天"系统,看到一些网上的内容上有下面的头文件,但是看定义弹出"找不到文件"的对话框,我知道这是linux下的,我想知道这几个如果在windows下写的话分别对应怎样的代码,求各路大神指教 #include #include #include #include #include #include #include 解决方案 winsock2.h//windows下网络编

C#网络编程技术FastSocket实战项目演练

一.FastSocket课程介绍         .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而且对于多连接并发,还要自己处理多线程等等.本期分享课程阿笨给大家带来的是来源于github开源Socket通信中间件:FastSocket,目的就是把大家从繁琐的网络编程技术中彻底地解放和释放出来.         阿笨只想安安静静的学习下网络编程技术Socket后,将学习的成果直接

CentOS虚拟机如何设置共享文件夹,并在Windows下映射网络驱动器?

一.为什么要这么做? 最近在做Linux下的软件开发,但又想使用Windows下的编程工具"Source Insight". 二.安装环境 本机系统:Windows 7 旗舰版 VMware:VMware Workstation 9.0 CentOS:CentOS 6.4 网络适配器设置为:NAT 转换 三.查看是否已经安装"samba" 命令:rpm -qa|grep samba 输出结果: samba-client-3.0.33-3.28-1.el5samba-

Windows 下的 7 种 DLL 劫持技术

本文讲的是Windows 下的 7 种 DLL 劫持技术,在本文中,我将列出半打可以在Windows运行用户模式的进程中使用DLL注入技术.也许可能会有更多类似的技术,但我正在和你分享的是我所拥有的第一手的技术. AppInit_DLLs 人们以前往往依赖于AppInit_DLLs注册表项.它是操作系统加载程序查询此值并加载创建进程时指定的DLL.我在很长一段时间没有使用这种技术(最后一次我使用它在Windows XP上),而且我听说现在受到恶意软件的广泛使用,所以它也受到限制或被停止使用了.