呵呵,我知道了:
在WIN32中,DLL是附着在运行进程上的,没有自己的内存空间,每一个调用DLL的进程都获得自己的数据拷贝。当你当程序窗口不是当前窗口时,file是空指针,所以访问出错。
要解决这个问题的话,,必须实现数据共享,你要用在DLL中设置共享变量,哦,设置共享变量还不行,你用的是文件指针,还要改成不是指针:1.定义变量时向下面这样定义:
#pragma data_seg (".MyShare") // 可以取任何别的名字,但必须和DEF中一致
CFile file;
#pragma data_seg ()
这段代码告诉链接器将三个变量放到叫".MyShare”的数据段中
2.DEF文件中加上这条,名称要和上面一致:
SECTIONS .MyShare READ WRITE SHARED3.修改你的源文件,将指针改为非指针。(自己去改吧,我比较懒的。)4.OK,搞定。
在WIN32中,DLL是附着在运行进程上的,没有自己的内存空间,每一个调用DLL的进程都获得自己的数据拷贝。当你当程序窗口不是当前窗口时,file是空指针,所以访问出错。
要解决这个问题的话,,必须实现数据共享,你要用在DLL中设置共享变量,哦,设置共享变量还不行,你用的是文件指针,还要改成不是指针:1.定义变量时向下面这样定义:
#pragma data_seg (".MyShare") // 可以取任何别的名字,但必须和DEF中一致
CFile file;
#pragma data_seg ()
这段代码告诉链接器将三个变量放到叫".MyShare”的数据段中
2.DEF文件中加上这条,名称要和上面一致:
SECTIONS .MyShare READ WRITE SHARED3.修改你的源文件,将指针改为非指针。(自己去改吧,我比较懒的。)4.OK,搞定。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货