描述:
一个全局COM对象(进程外全局的); 目的:作成开发包, 在多个进程共享数据, 让多个进程能修改\获取数据.
他拥有多个接口, 每个接口可能有多个应用程序在使用.
比如: 有2个接口
IGetDevice1Data : 获取1号类型的设备数据
IGetDevice2Data : 获取2号类型的设备数据
一. 如果这个COM对象已经发布出去了, 我修改了一些东西, 下列哪种情况, 其他人开发的软件需要重新编译.
1. 现在我修改IGetDevice1Data 实现类已有的成员变量名称
2. 现在我为IGetDevice1Data 实现类增加一个成员变量
3. 现在我为IGetDevice1Data 实现类增加一个成员函数
4. 现在我为IGetDevice1Data 接口增加一个方法
5. 修改IGetDevice2Data接口, 如果别人只使用IGetDevice1Data接口, 他需要更新吗?
6. 增加一个新的接口IGetDevice3Data
二. 自定义数据类型(struct)
1.如果为了方便别人用VB Dephi 开发, 怎样定义最好?
方式1: 把结构体以字节流写入SAFEARRAY,再将SAFEARRAY的字节读到结构体中.
方式2: 直接定义到IDL文件中
2.如果结构体里面包含了 std::list 类型, 能否被VB Dephi 识别呢?
三. 如果为了方便别人用VB Dephi 开发, 需要注意些什么问题?
1. 比如接口\方法的类型, 变量需要注意哪些?
谢谢大家!
祝愿大家在新年里 身体健康 工作顺利 财源滚滚!
解决方案1:
一、4和5需要客户再编译,其他不需要,接口的一个最基本性质就是不变性。
二、SAFEARRAY的方法比较土而且适应性不好,因为自定义类型必须是可以进行有意义的序列化,最标准的做法是把自定义类型封装成COM对象。
三、一般来说VB Dephi要求接口是分发接口,接口方法的参数应该是Viariant兼容类型。