String2Psz() 和 Cast2Psz() 只能在局部变量作用域内使用:
String2Psz() 或 Cast2Psz() 的结果不能持久存在非局部变量作用域的内存位置中。
当分配 PSZ 值的作用域结束时,该值将被销毁。
您必须使用 StringAlloc() 代替它,并在代码中管理 PSZ 的生命周期。
在下面的代码中,p2 字段使用 String2Psz() 内联初始化。
在构造函数中,我们也尝试用 String2Psz() 为 p1 赋值。这也是不允许的。
CLASS TestClass
EXPORT p1 AS PSZ
EXPORT p2 := String2Psz("psz2") AS PSZ // Error here
CONSTRUCTOR()
p1 := String2Psz("psz1") // Error here
RETURN
END CLASS
解决办法是这样的:
CLASS TestClass
EXPORT p1 AS PSZ
EXPORT p2 AS PSZ
CONSTRUCTOR()
p1 := StringAlloc("psz1")
p2 := StringAlloc("psz2")
DESTRUCTOR()
MemFree(p1)
MemFree(p2)
RETURN
END CLASS