dll的全局变量不共享?

tyzam 2008-06-04 11:49:11
最近在搞jni的东东,java调用vc的dll,在dll里定义了
#pragma data_seg ("sharedata")
bool m_gbInited = false;
vector<char> m_gv_Data;
string test;
int m_glDataSize = 0;
//共享数据
#pragma data_seg()
#pragma comment(linker, "/SECTION:sharedata,rws")

结果两个进程(调用同一个dll)同时运行,第一个启动的进程把上面的变量都初始化了
m_gbInited=true;
test="this is test";
m_glDataSize=124;
m_gv_Data也填充了数据
然后执行第二个进程,结果观察到的test仍为空值,m_gbInited和m_glDataSize的值是进程一改变后的新值,奇怪了,data_seg不支持全局共享麽?
...全文
183 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyzam 2008-06-30
  • 打赏
  • 举报
回复
管道的试试看吧
babanake 2008-06-11
  • 打赏
  • 举报
回复
多进程 ?

要想共享全局变量, 请将变量放入共享节中
sunlin7 2008-06-07
  • 打赏
  • 举报
回复
使用管道嘛,或者开辟足够大的char共享空间也行啊。
greatws 2008-06-05
  • 打赏
  • 举报
回复
写注册表吧,或者用文件方式共享
arong1234 2008-06-05
  • 打赏
  • 举报
回复
不可实现的需求就是不合理需求,解决办法就是“改变你的需求”,没有任何一种功能必须依赖特定的技术,好好分析你到底需要什么功能,用什么技术可以实现,而不是首先选择一种不可行的技术,然后问怎么办。如果一定要问怎么办,在你一定要在共享内存内使用指针的前提下,答案就是“没办法”
[Quote=引用 2 楼 tyzam 的回复:]
那有这样的要求怎么办
[/Quote]
rageliu 2008-06-05
  • 打赏
  • 举报
回复
不要使用string ,使用 char test[...]
cnzdgs 2008-06-05
  • 打赏
  • 举报
回复
指针及含有指针的对象只在本进程内有效,把string改成字符数组,赋值改成拷贝。如有必要则采取线程通过机制。
arong1234 2008-06-04
  • 打赏
  • 举报
回复
0
tyzam 2008-06-04
  • 打赏
  • 举报
回复
那有这样的要求怎么办
arong1234 2008-06-04
  • 打赏
  • 举报
回复
带有指针的变量是不能放在共享区的,因为指针只在一个进程空间里有效,你在另外一个空间访问就是非法。string,vector对象就是包含指针的,所以绝对不允许你这么做。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧