类的成员变量的生命周期,该怎么处理
类的成员变量的生命周期
DLL中四个文件,分别如下:
[color=#800000]test.h[/color]
class CTest{
void N_Init();
void N_ValueGet();
WORD wValue;
};
test.cpp
void CTest::N_Init(){
wValue = 10;
}
WORD CTest::N_ValueGet(){
return wValue;
}
//以下文件中的函数为这个dll中的导出(export)函数
exTest.h
void F_Init();
WORD F_ValueGet();
exTest.cpp
CTest hTest;
void F_Init(){
hTest.N_Init(){
}
WORD F_ValueGet();
hTest.N_ValueGet(){
}
现在有一个EXE文件,首先加载了这个dll,调用了F_Init函数,设定了wValue的值;然后启动了一个IE进程。在这个IE进程中调用了dll中的F_ValueGet函数。
问题如下:
1、这时候wValue的值是10吗?还是IE进程中加载这个dll的时候,给他的类成员变量重新分配了空间?(从我的测试来看,不等于10)
2、如果想要value等于10 ,也就是两个进程操作一个dll的时候,让这个类成员变量的值为两个进程所用,应该怎样做呢?
------解决思路----------------------
#pragma data_seg("ShareMem")
int g_value = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:ShareMem,RWS")
这样写可以多进程共享变量
------解决思路----------------------
把数据放共享数据段,这样多个进程可以共享dll中同一份数据
DLL中四个文件,分别如下:
[color=#800000]test.h[/color]
class CTest{
void N_Init();
void N_ValueGet();
WORD wValue;
};
test.cpp
void CTest::N_Init(){
wValue = 10;
}
WORD CTest::N_ValueGet(){
return wValue;
}
//以下文件中的函数为这个dll中的导出(export)函数
exTest.h
void F_Init();
WORD F_ValueGet();
exTest.cpp
CTest hTest;
void F_Init(){
hTest.N_Init(){
}
WORD F_ValueGet();
hTest.N_ValueGet(){
}
现在有一个EXE文件,首先加载了这个dll,调用了F_Init函数,设定了wValue的值;然后启动了一个IE进程。在这个IE进程中调用了dll中的F_ValueGet函数。
问题如下:
1、这时候wValue的值是10吗?还是IE进程中加载这个dll的时候,给他的类成员变量重新分配了空间?(从我的测试来看,不等于10)
2、如果想要value等于10 ,也就是两个进程操作一个dll的时候,让这个类成员变量的值为两个进程所用,应该怎样做呢?
------解决思路----------------------
#pragma data_seg("ShareMem")
int g_value = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:ShareMem,RWS")
这样写可以多进程共享变量
------解决思路----------------------
把数据放共享数据段,这样多个进程可以共享dll中同一份数据