我有一个com+组件,它调用另一个com(save.dll),这个com(save.dll)调用ADO来在sql2000数据库中插入一条记录,然后返回,然后我在com+组件中做事务回滚,
代码系m_spObjectContext->SetAbort();//m_spObjectContext的定义是这样的: CComPtr<IObjectContext> m_spObjectContext;
但回滚失败,请各位高手帮帮忙!!!另外,如果我在这个save.dll写一个出口函数,然后用com+组件用动态链接库的形式链接save.dll,即用LoadLibrary,然后GetProcAddress,这样就可以实现事务回滚。但我现在必须使用com来完成。真系好奇怪!!!为什么com不行呢???

解决方案 »

  1.   

    我找到答案了,但又有新的问题。
    答案是:另一个com(save.dll)如果是MTS组件,就可以实现事务回滚。
    新问题是:实现上述事务回滚的前提条件是必须在com+中创建(CreateInstance)MTS组件(save.dll),但我现在需要com+接收到这个MTS组件(save.dll)的接口,然后调用,结果事务回滚失败。就是说,MTS组件不是在com+中创建,就不可以实现事务了吗?有办法补救吗?