我有一个 COM 服务器(C++/STA(基于 MFC 的应用程序))和一个 COM 客户端(C#/MTA)。COM 服务器必须存在于 STA 中,因为它是一个 MFC 应用程序(我在这件事上别无选择)。客户端向服务器发出调用,服务器向客户端发出回调。这就是错误发生的地方(RPC_E_CANTCALLOUT_ININPUTSYNCCALL
)。我猜如果服务器是 MTA,这个问题永远不会出现,但遗憾的是,MFC 的文档明确否认将公寓初始化为 MTA。
关于如何解决这个问题的任何想法?
我一直在玩弄让服务器对象(我通过运行对象表公开的对象)存在于它自己的公寓 (MTA) 中的想法。这是一个好主意,还是先尝试一些更简单的方法?
更新
服务器对象只是应用程序中某些功能的一个薄接口点。大多数情况下,它只是读取和写入内存位置,但在某些情况下,它会为应用程序中的各个窗口生成窗口消息。服务器对象本身并不是整个应用程序。