首 页
┆
源码下载
┆
IT学院
┆
字体下载
┆
模板下载
┆
源码发布
┆
广告合作
┆
网站地图
┆
虚拟主机
┆
中文域名
►
设为首页
►
加入收藏
►
联系我们
源码下载
>>
ASP源码
|
PHP源码
|
ASP.net源码
|
JSP源码
|
CGI源码
|
VC/C++源码
|
VB源码
|
Delphi源码
|
Flash源码
文章学院
>>
网络编程
|
网页设计
|
图形图象
|
数据库
|
服务器
|
网络媒体
|
网络安全
|
操作系统
|
办公软件
|
软件开发
|
黑客知识
字体下载
>>
精制字体
|
非英字体
|
艺术字体
|
著名字体
|
哥特式
|
简单字体
|
手写体
|
节假日
|
图案字体
|
精度像素
|
中文字体
模板下载
>>
企业门户
|
数码网络
|
休闲娱乐
|
影视音乐
|
旅游名胜
|
文化艺术
|
电子商务
|
个性展示
|
登陆导航
|
Flash模板
源码搜索
文章搜索
字体搜索
模板搜索
►►
您当前的位置:
源码园
→
IT学院
→
软件开发
→
C/C++编程
→ 文章内容
VC++6.0中控制运行唯一实例
作者:佚名 来源:网上收集 发布时间:2005-12-8 1:28:21
1.在MFC应用程序中加入一个MFC Extension DLL
选择Project|Add To Project|New...菜单对话框中的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( )
其中,.SharedData就是我们实现的共享数据段的名称。这个数据段只包含一个变量long m_nRun,初始值为-1。
下面在Single.def文件中使用SECTIONS语句设置该共享数据段的属性:
SECTIONS
.SharedData READ WRITE SHARED
这样就使得使用这个DLL的应用程序能以读写方式共享.SharedData中定义的变量。
然后设计检查程序已运行实例个数的函数并导出,仍然使用def文件:
EXPORTS
; Explicit exports can go here
JudgeNo @1
所要添加的只是JudgeNo @1这一条语句,意思是JudgeNo是第一个输出函数,如果需要,还可以添加其他函数。JudgeNo的实现是在Single.cpp中。
long JudgeNo( )
{return m_nRun;}
这里只是简单的返回了m_nRun的值,因为这个函数是供应用程序调用的。同时还要在Single.cpp的入口点函数DllMain返回成功值的语句前添加语句m_nRun++,意思是在应用程序启动连接DLL成功时对已经运行的实例进行计数。这里需要强调的是DLL共享数据的概念,它指的是多进程调用DLL时内存中只保存数据的一个副本供它们共同拥有,因此这里的变量m_nRun可以起到为程序所有运行的实例计数的作用。
3.应用程序调用JudgeNo( )
我们先在DLL中添加一个类,这样应用程序通过包含这个类的头文件就可以调用JudgeNo( )。选择Insert|New Class…菜单,弹出对话框后,在Class Type中选择Generic Class,新创建一个无任何基类的Cout类,默认的文件名是Out.h和Out.cpp,由
VC++自动生成。在Out.h的类成员声明之前加上语句long JudgeNo()即可。完成之后将Out.h拷贝到应用程序的工程目录下。
选择Project|Dependencies…菜单,将应用程序的工程设置为依赖于Single工程。在应用程序应用类的实现文件中添加#include "Out.h"。然后在InitInstance( )函数的开头添加如下代码:
if(JudgeNo())
{
AfxMessageBox("程序已执行!",MB_OK|MB_ICONINFORMATION);
return FALSE;
}
编译后将生成的Single.dll拷贝到Windows安装目录的System子目录下,该目录存放有系统所有的DLL文件。运行程序,如果是第二次运行,则会弹出对话框显示"程序已执行!"。说明DLL实现了对程序运行实例的计数。
本例中通过使用DLL完成了控制应用程序运行唯一实例,同时也能使初学者对DLL编程的关键技术有一个初步的体会。
[] [
返回上一页
] [
打 印
]
上一篇文章:
VC编程中如何操作数据库中的图像字段
下一篇文章:
在VC++下对文件属性的获取与更改
相关文章:
在VC++下对文件属性的获取与更改
VC++6.0中控制运行唯一实例
[图文]
VC++ SMTP协议电子邮件传送剖析
[图文]
C++/VC++编程的疑难问题及解答(二)
C++/VC++编程的疑难问题及解答
[图文]
VC++通用GIS功能开发解决方案 2.0v 介绍
[图文]
VC++界面一揽子解决方案(第三版) 介绍
[组图]
VC++的Unicode编程
用VC++设计语法编辑器
宽字符标量L"xx"在VC6.0/7.0和GNU g++中的不同实现
[图文]
在VC++实现数据加密
[图文]
DES算法及其在VC++6.0下的实现(上)
关于本站
-
网站帮助
-
广告合作
-
下载声明
-
友情连接
-
网站地图
-
源码发布
Copyright © 2003-2009
Ymyasp
.Com
. All Rights Reserved .
备案序号:粤ICP备07029071号