种的静态成员变量的值为什么改变了

类的静态成员变量的值为什么改变了?
vc6 ,MFC
一个dll project,有一个类
class A{
static CString m_str;
static void SetString(CString s); //给m_str赋值,单步调试发现的确是赋值成功了的。
};

在.cpp文件中
CString A::m_str;

编译连接正确。

一个app程序使用dll的类A
CString s = A::m_str;
编译连接,说m_str是unresoved, 为什么?
只有把m_str再声明一遍在app工程里
CString A::m_str;
链接没有问题了。

执行程序就有问题

单步调试:代码进入dll里时,m_str显示被赋值了,但返回到exe的代码时,m_str就成了空的了。
静态变量为什么值会发生变化?如何解决?

------解决方案--------------------
静态成员变量被限制作用域了吧,
------解决方案--------------------
>只有把m_str再声明一遍在app工程里
那样你exe的这个m_str和dll的m_str是两个没有关系的东西了。exe里的代码只看得到exe的m_str看不到dll的m_str。
------解决方案--------------------
是有两个 CString A::m_str; 变量了.
你需要把 dll 中的变量导出, exe 再去链接.
不能连接不过就重新定义一个...