有的应用程序希望控制程序运行唯一的实例。比如最常用的mp3播放软件winamp,需要独占音频设备,因此只允许自身运行唯一的例程。 在vc6.0++的开发实践中,16位的windows系统下,hprevinstance句柄保存了应用程序上一个运行的实例,可以用来检查是否有实例运行;在32位windows系统下,这个值总是null。对于具有窗口的应用程序,可以用静态函数cwnd::findwindow查找具有窗口的实例,判断程序是否已经运行,但对于无窗口的应用程序却无能为力。实际上,通过动态连接库dll,可以实现更通用的控制方法,其过程如下:
1.在mfc应用程序中加入一个mfc extension dll
选择projectadd to projectnew...菜单对话框中的projects标签,点中mfc appwizard(dll),取名为single,其余默认。在mfc appwizard-step 1 of 1对话框中,选择mfc extension dll(using shared mfc dll)。通过下面的步骤实现这个dll。
2.实现共享数据和导出函数
用#pragma data_seg指令实现共享数据段。在single.cpp包含头文件的语句后添加下列语句:
| #pragma data_seg(".shareddata") long m_nrun=-1; #pragma data_seg( ) |
| sections .shareddata read write shared |
| exports ; explicit exports can go here judgeno @1 |
| long judgeno( ) {return m_nrun;} |
| if(judgeno()) { afxmessagebox("程序已执行!",mb_okmb_iconinformation); return false; } |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器