全部博文(237)
分类: C/C++
2009-11-09 17:09:53
为什么如此呢?因为本质上在智能手机中,在装入DLL后,它是没有私有的内存空间。这就意味着如果有两个程序来同时使用这个DLL,那在内存中只有它的一份拷贝。这是不同于windows平台的,在那每个使用dll的程序都为它保留了一块自己的空间。这样一来花费的内存可吓人了,所有symbian是不会做这种事情的,特别是用到系统dll时。此外它允许dll从ROM中直接执行,既节省了空间又提高了速度。
而从编程的角度来看,dll就不能拥有全局的可写数据了。这意味着任何在函数体外面的变量或是类的静态成员变量都是不允许的。在模拟器上编译时,这些都不是问题,但一但你要编译到目标设备上,那就会得到uninitialised/initialised data的错误!最糟糕的是编译器不会告诉你哪些数据引起了这样的错,而这通常都是由于全局可写数据存在引起的!
所以只要将你类中的静态变量和全局数据(非const的)去除即可。
有时候你需要把它们做为一个类的成员变量,然后以参数的形式传递到各自需要的地方,我在移植一个程序为dll时就碰到这样的局面,结果是改动了一大堆地方才弄好,比较伤脑筋,呵呵。