我正在为现有的旧版C ++ MFC应用程序实现COM接口。应用程序是多线程的,使用一个用于COM / GUI的线程(主线程)和一个用于来自C库的传入事件。 COM接口反映了用户可以使用GUI进行的交互。
编辑:COM服务器是“进程外”,即COM由MFC应用程序实现。
COM接口具有在树视图控制器中选择对象的功能。当选择一个对象时,用户可以调用将使用该对象执行不同功能的COM函数。
编写MFC应用程序,使得模型多次与GUI回调函数紧密耦合,原因各种各样。对于SelectObject函数,这意味着在完全执行回调函数之前,不会在树视图中真正选择对象。这意味着实例1看起来更像是:
如果使用正常的GUI交互,这对用户来说不是问题;在用户在树视图中选择对象X之后,在很短的时间内调用回调函数,因此函数Z将删除对象X.
使用COM接口时,这就成了问题。当函数Y返回时,用户可以选择立即调用函数Z.如果调用了回调函数,则对象X将被删除,否则将发生意外行为。
这是不受欢迎的行为。像SelectObject这样的函数向用户指示当函数执行完毕后,应该选择一个对象而不需要额外的等待。
我一直试图找出解决这个问题的方法,并提出了一些可能的想法:
3号很有意思但我缺乏知识。有没有人遇到过他们解决过的类似问题?我真的很想帮助解决这个问题:)