我有一个COM服务器(基于C++/STA(MFC为基础的应用程序))和一个COM客户端(基于C# / MTA)。由于它是一个MFC应用程序(我在这个问题上没有选择),因此COM服务器必须驻留在STA中。客户端发出对服务器的调用,服务器向客户端发出回调。这就是错误发生的地方(
RPC_E_CANTCALLOUT_ININPUTSYNCCALL
)。我猜想如果服务器是MTA的话,这个问题就不会出现,但遗憾的是,MFC的文档明确拒绝将公寓初始化为MTA。
有什么解决这个问题的想法吗?
我一直在考虑让服务器对象(通过运行对象表公开的对象)位于其自己的公寓(MTA)中。这是个好主意吗?还是有更简单的尝试方法?
更新
服务器对象只是指向应用程序中某些函数的轻量级接口点。大部分时间它只读取和写入内存位置,但也有时候会给应用程序中的各个窗口生成窗口消息。服务器对象本身并不是整个应用程序。