第四部分 动态链接库 第22章 插入DLL和挂接API (二)

22.4 使用远程线程来插入DLL 插入D L L的第三种方法是使用远程线程。这种方法具有更大的灵活性。它要求你懂得若干个Wi n d o w s特性、如进程、线程、线程同步、虚拟内存管理、D L L和U n i c o d e等(如果对这些特性不清楚,请参阅本书中的有关章节)。Wi n d o w s的大多数函数允许进程只对自己进行操作。这是很好的一个特性,因为它能够防止一个进程破坏另一个进程的运行。但是,有些函数却允许一个进程对另一个进程进行操作。这些函数大部分最初是为调试程序和其他工具设计的。不过任何函数都可以调用这些函数。 这个D L L插入方法基本上要求目标进程中的线程...
vc | 2008-11-27 01:09 | 阅读 6719 次 | 评论 0 条

第四部分 动态链接库 第22章 插入DLL和挂接API

在Microsoft Wi n d o w s中,每个进程都有它自己的私有地址空间。当使用指针来引用内存时,指针的值将引用你自己进程的地址空间中的一个内存地址。你的进程不能创建一个其引用属于另一个进程的内存指针。因此,如果你的进程存在一个错误,改写了一个随机地址上的内存,那么这个错误不会影响另一个进程使用的内存。 在Windows 98下运行的各个进程共享2 GB的地址空间,该地址空间从0 x 8 0 0 0 0 0 0 0至0 x F F F F F F F F。只有内存映像文件和系统组件才能映射到这个区域。详细说明参见第1 3、1 4章和第1 7章的内容。 独立的地址空间对于...
vc | 2008-11-27 01:07 | 阅读 3689 次 | 评论 0 条

第四部分 动态链接库 第21章 线程本地存储器

有时,将数据与对象的实例联系起来是很有帮助的。例如,窗口的附加字节可以使用S e t Wi n d o w s Wo r d和S e t Wi n d o w L o n g函数将数据与特定的窗口联系起来。可以使用线程本地存储器将数据与执行的特定线程联系起来。例如,可以将线程的某个时间与线程联系起来。然后,当线程终止运行时,就能够确定线程的寿命。 C / C + +运行期库要使用线程本地存储器( T L S)。由于运行期库是在多线程应用程序出现前的许多年设计的,因此运行期库中的大多数函数是用于单线程应用程序的。函数s t r t o k就是个很好的例子。应用程序初次调用s t r t...
vc | 2008-11-27 01:06 | 阅读 4266 次 | 评论 0 条

第四部分 动态链接库 第20章 DLL的高级操作技术

上一章介绍了D L L链接的基本方法,并且重点说明了隐含链接的技术,这是D L L链接的最常用的形式。虽然对于大多数应用程序来说,只要了解上一章介绍的知识就足够了,但是还可以使用D L L进行更多的工作。本章将要介绍与D L L相关的各种操作方法。大多数应用程序不一定需要这些方法,但是它们是非常有用的,所以应该对它们有所了解。 20.1 DLL模块的显式加载和符号链接 如果线程需要调用D L L模块中的函数,那么D L L的文件映像必须映射到调用线程的进程地址空间中。可以用两种方法进行这项操作。第一种方法是让应用程序的源代码只引用D L L中包含的符号。这样,当应用程序启动运行时...
vc | 2008-11-27 01:04 | 阅读 4381 次 | 评论 0 条

核心编程 第四部分 动态链接库 第19章 DLL基础

自从M i c r o s o f t公司推出第一个版本的Wi n d o w s操作系统以来,动态链接库( D L L)一直是这个操作系统的基础。Windows API 中的所有函数都包含在D L L中。3个最重要的D L L是K e r n e l 3 2 . d l l,它包含用于管理内存、进程和线程的各个函数; U s e r 3 2 . d l l,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数; G D I 3 2 . d l l,它包含用于画图和显示文本的各个函数。 Wi n d o w s还配有若干别的D L L,它们提供了用于执行一些特殊任务的函数...
vc | 2008-11-27 01:03 | 阅读 3000 次 | 评论 0 条

实时语音通信的实现

作者:解放军炮兵学院 十四队 孔康 引言  本人虽已学习VC++一年半载,仍觉捉襟见肘,好在有VCKBASE的帮忙,确实学到了不少东西,www.vckbase.com也成了我每次上民网必到之处(阁下有所不知,鄙人接受最为严格的管理,上民网是要申请的)。近日在做一个通信 方面的程序,实时的语音和视频通信当然是大家所喜欢的。本文将向您展示局域网环境下实时语音通信的的一个解决方案(视频这一块正在做,估计很快就能出炉),Winxp环境下测试效果良好,并且具有网络 拥塞处理机制,您不妨一看。  本文以第26期 栾义明 先生的《基于API的录音机程序》为基础的,在此深表感谢。雷同之处将不再赘述,...
默认分类 | 2008-11-23 11:37 | 阅读 6015 次 | 评论 0 条

VC++开发的应用技巧三则

1、创建向导对话框   在使用具体某个软件的时候,我们常常会在该程序中使用向导模式来建立新的文件,最典型的例子就是在Frontpage2000中或者Word2000中使用向导方式来新建一个网页文件或者Word文档。那么看到别的程序都能提供人性化的向导对话框后,不知您有没有什么冲动?如果有的话,不妨使用下面的代码来创建一个向导对话框: 以下是引用片段:void CMy56_s1Dlg::OnWiz() { CSheet sheet; sheet.SetWizardMode(); int iRet=sheet.DoModal();//返回ID_WIZF...
vc | 2008-11-23 11:20 | 阅读 1786 次 | 评论 0 条

用Winsock实现语音全双工通信使用

2000-03-21 00:00作者:张晓明 杨建华 钱名出处:Hedgehog Studio责任编辑: P>一、引言?  Windows 95作为微机的操作系统,已经完全融入了网络与通信功能,不仅可以建立纯Windows 95环境下的“对等网络”,而且支持多种协议,如TCP/IP、IPX/SPX、NETBUI等。在TCP/IP协议组中,TPC是一种面向连接的协义,为用户提供可靠的、全双工的字节流服务,具有确认、流控制、多路复用和同步等功能,适于数据传输。UDP协议则是无连接的,每个分组都携带完整的目的地址,各分组在系统中独立传送。它不能保证分组的先后顺序,不进行分组出错的恢复与...

用VC++6.0制作简易浏览器

作者:重庆 黄文平 浏览器是我们上网时必须使用的软件,我们常用的浏览器有IE、Netscape等。面对它们,我们往往会感叹如此强大功能的软件是如何编写出来的呢?的确,要编写一个功能完善的浏览器是很不容易的。但是,利用当今的一些面向对象开发工具来编写一个简易的浏览器以实现它的主要功能却十分容易。用VC++,一支烟的功夫就能办到!不信,请跟我来。  实现原理:  ActiveX控件可以看作是OLE容器中使用的进程内服务器,但是,只有在支持ActiveX控件的OLE容器中使用它,才能发挥其所有的功能。而VC++ 6.0的MFC创建的OLE容器完全支持ActiveX控件,所以它可以使用...

[转]用VC 6.0实现串行通信的三种方法

摘要: 本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。   在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。依据不同的条件实现对串口的灵活编程控制是我们所需要的。   在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。串行通信程序开发环境为 VC++ 6.0。   ...

[转]VC++的菜单控制和自绘菜单

菜单控制 为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态 需要将CFrameWnd:: m_bAutomenuEnable设置为FALSE,如果该数据成员为TRUE(缺省值),工作框将自动地禁止没有ON_UPDATE_COMMAND_UI或者ON_COMMAND的菜单项。 //Disable MFC from automatically disabling menu items. m_bAuoMenuEnable=FALSE; //Now enable the menu item. CMenu* pMenu=GetMenu (); ASSERT_VALID ...
vc | 2008-11-22 16:19 | 阅读 3912 次 | 评论 0 条

[转]VC中利用多线程技术实现线程之间的通信

当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的。本实例针对多线程技术在应用中经常遇到的问题,如线程间的通信、同步等,分别进行探讨,并利用多线程技术进行线程之间的通信,实现了数字的简单排序。     一、 实现方法  1、理解线程...

WINSOCK的VC++实现聊天室程序设计

一般在使用中,面向连接协议的SOCKET编程模型应用最为广泛,因 为面向连接协议提供了一系列的数据纠错功能,可以保证在网络上传输 的数据及时、无误地到达对方。 总的来说,使用SOCKET接口(面向连接或无连接)进行网络通信时, 必须按下面简单的四步进行处理: 1、程序必须建立一个 SOCKET。 2、程序必须按要求配置此SOCKET。也就是说,程序要么将此 SOCKET连接到远方的主机上,要么给此SOCKET指定一个 本地协议端口。 3、程序必须按要求通过此SOCKET发送和接收数据。 4、程序必须关闭此SOCKET。 用WINSOCK实现聊天室的VC++程序设计...

用VC设计托盘图标程序

在Windows操作系统中,任务栏的右边(托盘)会常驻几个图标,如输入法切换图标、音量控制图标等,此外我们还经常遇到具有托盘图标的软件,如金山词霸、实时监测功能的杀毒软件等。这些软件在后台运行,通常不占用太多的屏幕资源,只在通知栏上放一个小小的标志,必要时我们可以通过用鼠标点击图标对其进行选单操作或激活其主窗口。有时我们自己编写的程序也希望有类似的效果,本文将详细地介绍用VC设计托盘图标程序的方法。   一、 NOTIFYICONDATA结构   NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容。其定义为:   ...
vc | 2008-11-22 16:09 | 阅读 4388 次 | 评论 0 条

[转]用VC++6.0编写Proxy服务器

常用的代理服务器软件有procy sever 2.0以及WinGate等等。利用VC 6.0强大功能也可以编写出自己的代理服务器应用软件。本文介绍了具体的实现方法。一. 原理 本程序的结构原理如下: 对于每一个用户的请求(Internet 请求,由浏览器发出),本程序将启动两个线程,一个把本地用户的请求数据发送到远程的Internet主机,另一个线程把远程主机的回应数据发送到本地请求用户。 二. 主要函数 UserToProxyThread ( void * pParam ) :它是用来把本地用户请求数据发送到远程主机的,起服务器线程角色。当接到本地(局域网)用户的请求,它就启动另一个自...
vc | 2008-11-22 16:08 | 阅读 3635 次 | 评论 0 条

VC命名管道通信的实现

无论是SQL Server的用户,还是PB的用户,作为C/S结构开发环境,他们在网络通信的实现上,都有一种共同的方法——命名管道。由于当前操作系统的不惟一性,各个系统都有其独自的通信协议,导致了不同系统间通信的困难。尽管TCP/IP协议目前已发展成为Internet的标准,但仍不能保证C/S应用程序的顺利进行。命名管道作为一种通信方法,有其独特的优越性,这主要表现在它不完全依赖于某一种协议,而是适用于任何协议——只要能够实现通信。   命名管道具有很好的使用灵活性,表现在:   1) 既可用于本地,又可用于网络。   2) 可以通过它的名称而被引用。   3) 支持多客户机连接。   4...

VC++动态链接库编程之DLL木马

DLL木马的原理 DLL木马的实现原理是编程者在DLL中包含木马程序代码,随后在目标主机中选择特定目标进程,以某种方式强行指定该进程调用包含木马程序的DLL,最终达到侵袭目标系统的目的。 正是DLL程序自身的特点决定了以这种形式加载木马不仅可行,而且具有良好的隐藏性: (1)DLL程序被映射到宿主进程的地址空间中,它能够共享宿主进程的资源,并根据宿主进程在目标主机的级别非法访问相应的系统资源; (2)DLL程序没有独立的进程地址空间,从而可以避免在目标主机中留下"蛛丝马迹",达到隐蔽自身的目的。 DLL木马实现了"真隐藏",我们在任务管理器中看不到木马"进程",它完全溶进了系统的内核。与...
默认分类 | 2008-11-22 16:07 | 阅读 4835 次 | 评论 0 条

VC中创建DLL动态连接库的方法

今天教大家在VC中创建DLL文件的方法步骤,一起来学习一下,并不是很难的,相信聪明的你一看就会。   一.Win32动态链接库   1.制作的步骤:   (1)新建WIN32 Dynamic-link Library工程,工程名为MyDll,选择A simple DLL project类型。   (2)MyDll.h的内容如下: 以下是引用片段:  extern "C" _declspec(dllexport) int sum(int a,int b);//本文所有的例子只有一个sum即加法函数。   (3)MyDll.cpp的内容如下: ...
vc | 2008-11-22 16:05 | 阅读 2492 次 | 评论 0 条

[转]vc 开发简单的flash 播放器

1。新建一个基于对话框的程序,添加变量: int m_nTimer; //Timer时间控制 bool timerflag; //Timer启用的标志 bool screenflag; //全屏的标志 bool playflag; //有无文件打开的标志 CRect flashrect; //记录Shockwaveflash组件的矩形区域 WINDOWPLACEMENT m_FlashPos; //记录Shockwaveflash组件的状态 WINDOWPLACEMENT m_WndPos; //记录对话框窗口的状态 ...
vc | 2008-11-22 16:04 | 阅读 8895 次 | 评论 0 条

[转]Visual C++设计超强仿QQ自动伸缩窗口

一、观察  模仿前最重要的一步就是观察,经过半天对QQ的摆弄和摸索,总结出了以下一些特点:  1、窗口开始粘附时,检测的是鼠标坐标与桌面边界的距离,特别地,粘附在下面的时候,检测的是与任务栏的距离;  2、在向上移动窗口时,窗口边界永远不会超出桌面上面边界;  3、窗口是个 TopMost 风格;  4、当窗口粘附在上面、左边或右边并显示时,你把鼠标移动到最顶端,光标变成改变窗口大小的图标,而单单是把窗口的top坐标设置为0是不行的;  5、粘附在下面的时候,当处于移动状态,那么窗口的底边是与任务栏顶边对齐的,但从隐藏到显示的时候,窗口的底端是与屏幕底边对齐的;  6、隐藏后显露出来的那...
默认分类 | 2008-11-22 16:03 | 阅读 3509 次 | 评论 0 条