我正在开发一个具有一些 COM 接口的 API。问题在于 API 通过一个接口进行通信,该接口必须由加载该 API 的项目实现。因此,如果我要使用 API,我会将其加载到我的项目中并创建一个类,该类将实现 API 调用的方法,以通知我某些事情或将结果传递给我。
这显然成为了编组的噩梦。此外,由于还有一些中间对象通过 API 将调用从不同的插件和管理器传递到所有实现为通知调用的方法的对象,这些对象已将自己注册到 API 通知程序,这在术语上已经失控的复杂性。
我在想,为了缩短加载 API 的人需要完成的工作,如果 API 遵循自由线程模型,MFC 生成的类(例如对话框)是否可以实现所需的 COM 接口通知?请记住,这样的对象需要在 API 端转为 IStream 并转回接口,以便 API 可以调用这些方法。
据我所知,MFC 对话框默认是 STA。有没有办法可以强制他们改变或开始 MTA?从 COM 的角度来看,这是否合法?我试图避免创建另一个对象来处理另一个线程中的通知,因为它会使事情复杂化。此 API 需要在多个地方使用,有时在 GUI 中,有时在服务中等。