用DECLARE_CLASSFACTORY_SINGLETON宏的话可以共享简单对象,但是我做了一个经常外的COM组件,想给所有的调用者共享同一个连接实例(类似自己实现连接池),结果发现共享出去的接口虽然状态什么的都正确,但是不能执行sql语句打开数据集,查了msdn说要用列集,结果我用CoMarshalInterface列集_Connection接口后,然后GetHGlobalFromStream得到一个HGLOBAL内存句柄返回给客户调用组件后,CoUnmarshalInterface报磁盘读写错误。请问我哪儿用错了?donbox的书里不是说可以把HGLOBAL那块内存传往任意的套间使用吗?
最简单的做法,是传递IDispatch*,组件从_Connection查询出IDispatch*用于返回参数,客户端从IDispatch*查询出_Connection
呵呵,我最先就是这么做的,我说了从返回的IDispatch获得Connection后,查询连接状态什么的都是正确的,但是就是不能执行sql获得RecordSet,在Open的时候提示什么参数不正确或错误什么的,后来在网上查好像本来接口跨进程就要列集
呵呵,如果数据集跨进程共享用处不大,其实它后面说了用adUserClient传递离线RecordSet也可以,不过这与我期望的仅跨进程共享连接相差太远了!我现在只是期望,有没有曲径可以让我跨进程共享_Connection对象而已:)