一个运用程序的2个dll, 这个两个dll共同调用一个dll(DLL3),但是希望DLL3的数据(比如全局变量,函数的静态变量)可以在调用它的那两个dll里保持一直, 有办法吗?
解决方案 »
- 我想 我按一次按键 执行这个动作 然后20秒内 我再按这个按键 也不会去执行这个动作 20秒后按还可以按键去执行这个动作
- exit===>ExitProcess=====>TerminateThread====>ExitThread
- 请问这段代码有什么用?
- 求一个简单的WaveIn录音的实例
- TCP粘包的问题大家是怎么处理的
- 删掉,clw文件以后出现的问题???谢谢!
- 超级菜问题,网上下载的源码怎么用VC打开,好象打开.dsw文件没用,打开.dsp文件却要新建工作空间.
- VC2008中类视图和资源视图在哪里?
- 如何取得键盘输入?
- 我在程序中动态生成了一个CEdit类的控件,怎样设置它的变量为整数呢?
- 为什么鼠标双击时会执行单击的代码?
- <imglib.h>文件找不到,请帮帮忙,谢谢!
用#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可以起到为程序所有运行的实例计数的作用。
long m_nRun=-1; // 一定要初始化,否则就达不到共享的目的了
#pragma data_seg(".SharedData")
long m_nRun=-1;
#pragma data_seg( )
我想要共享的数据是我自己定义的类的一个实例, myclass mycl; 可以吗?
呵呵,共享数据段就相当于在所有的DLL中这些数据是共同的,呵呵,他们放置(分配内存)的地方可能不同导致无论在什么地方修改,其他使用这个DLL的文件都能立刻获得到修改的值。他们是属于这个DLL类的而不属于某个DLL的实例的!
#pragma data_seg(".SharedData")
long m_nRun=-1; 《--- 如果这里是改这样的那?: myclass *myclA=NULL; // myclass我定义的类
#pragma data_seg( ) T
|
一般来说我们要共享的不是一点简单的数据, 我想要共享的是我自己的类的一个实例的指针, 这样可以吗? 谢谢