【发布时间】:2014-04-15 08:36:34
【问题描述】:
我们有 1 个遗留 MFC 项目 (exe) 使用 IMPLEMENT_SERIAL(ItemA, BaseItem, 0) 之类的东西进行序列化,最近我们发现 ItemA 也涉及视图操作,因此我们决定将持久性部分分离到单个模块 (dll) 中。但是,当我们在应用更改后尝试从外部文件反序列化时会引发异常。
我发现 IMPLEMENT_SERIAL 宏在本地注册,如下所示:
#define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) \
CObject* PASCAL class_name::CreateObject() \
{ return new class_name; } \
extern AFX_CLASSINIT _init_##class_name; \
_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, \
class_name::CreateObject, &_init_##class_name) \
AFX_CLASSINIT _init_##class_name(RUNTIME_CLASS(class_name)); \
CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb) \
{ pOb = (class_name*) ar.ReadObject(RUNTIME_CLASS(class_name)); \
return ar; }
单独模块的持久化部分也应该在dll中注册,但是无法从exe访问,那么有没有办法读取这些RUNTIME_CLASS信息?或者我应该将单个模块作为静态库而不是 dll 吗?
提前致谢。
【问题讨论】: