读书人

com组件序列化有关问题

发布时间: 2012-02-10 21:27:42 作者: rapoo

com组件序列化问题
vc++6.0的com组件通过tlbimp转化成托管dll供.net调用,
先转化后的dll中的class并没有[Serializable]的标签,
现将com组件支持序列化.
class ATL_NO_VTABLE CBfsKernel2 : public CObject,
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CBfsKernel2, &CLSID_BfsKernel2>,
public IDispatchImpl<IBfsKernel2, &IID_IBfsKernel2, &LIBID_BFSCOMKERNEL2Lib>
编译后提示

IMPLEMENT_SERIAL(CBfsKernel2, CObject, 1)
报错cannot instantiate abstract class due to following members
但实际上CBfsKernel2类并没有虚函数,求教

[解决办法]
建议定义一个指针,这样就不同了,指针是什么?大家都知道,无论它指向的是内部类型还是自己定义的结构体类型还是类的类型变量,它只不过就是一个具有32BIT也就是4个字节内存的空间而已,不需要其他任何信息了,所以能成功定义一个抽象类的指针变量。
[解决办法]
像IDispatchImpl这样的com接口,全是虚函数,com必然有虚函数和虚函数表,实际上com就是对虚函数和虚函数表做了跨语言跨平台的规定而已,是对c++缺乏二进制规范的一个补充。
[解决办法]
你定义的接口,没有实现

读书人网 >VC/MFC

热点推荐