DLL共享数据遇到的问题

a451618645 2009-05-20 11:09:33
共享数据段定义如下:

int i=0;
int count=0;
typedef struct Ip
{
PCSTR ip;
struct Ip * next;
}userIp;
userIp *head=NULL;//指向头结点
userIp *rear=NULL;//指向尾节点

DLLMain中初始化如下:

case DLL_PROCESS_ATTACH:
hmodDll=hModule;
if(i==1)
{

}
else
{
head=new (userIp);
head->ip="0.0.0.0";
head->next=NULL;
rear=head;//初始化链表;
i=1;
}

用程序Test.exe (1)调试该DLL,向其加入节点,成功,监视窗口显示i=2,
head=0x043f27c0,(*head).ip="0.0.0.0";
rear=0x043f4168;
这时不关闭这个调试窗口,再打开一个C++同样调试,在DLLMain开始设置断点,监视窗口显示i=2,head=0x043f27c0,rear=0x043f4168;就是和上面的一样,这说明了两个DLL确实共享了数据,但是第二个监视窗口却好像不能识别head指针内容一样,显示head=0x043f27c0,,(*head).ip=CX0030:Error:Expression connot be evaluted.
这是什没意思啊,怎么解决?
...全文
96 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a451618645 2009-05-23
  • 打赏
  • 举报
回复
结贴了,我换一种思路。
a451618645 2009-05-22
  • 打赏
  • 举报
回复
问题是 我直接换成了 undesign long ip[300],但是两个监控窗口显示*ip内容一样,数组内容不一样
aqqwrpggame 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a451618645 的回复:]
问题是 我直接换成了 undesign long ip[300],但是两个监控窗口显示*ip内容一样,数组内容不一样
[/Quote]

什么是*ip内容一样,数组内容不一样?
aqqwrpggame 2009-05-20
  • 打赏
  • 举报
回复
每个进程的地址都是独立的,你在test(1).exe中ip是指向了本进程的地址空间中含有的字符串常量。在test(2)中ip的地址是test(1).exe进程,当然无法解析。如果你把ip改为char szIp[128]就有了。
greatws 2009-05-20
  • 打赏
  • 举报
回复
然后把IP地址存进去,或者直接用个int型来存2进制形式的IP,转换函数是inet_addr和inet_ntoa

greatws 2009-05-20
  • 打赏
  • 举报
回复
"0.0.0.0"其实是个指针,而指针的地址是每个进程相互独立的,你应该弄个char数组char ip[16],然后把地址存进去
wocow3 2009-05-20
  • 打赏
  • 举报
回复
head虽然能共享
但head所指的内容不能共享
head所指的内容是你在堆中分配的
oyljerry 2009-05-20
  • 打赏
  • 举报
回复
第二个编译器并不一定能debug出对应的内容
可以自己代码中打印一下对应的数据,看是否正确获得数据

15,471

社区成员

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

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