com - 具有 MTA 的进程外 COM 服务器

标签 com atl mta apartments

我有一个进程外 COM (ATL) 服务器,它已创建为自由线程 (CComMultiThreadModel)

我对这与调用我的对象的重入有何关系有点困惑,例如,我假设我可以同时从多个客户端调用并同时处理这些请求,但看起来(根据我的日志)每个请求都是序列化的。

我缺少什么,简单地创建一个类作为 MTA 是否意味着它确实如此,或者我还需要做其他什么事情。请注意,我在这里指的是所有进行并发调用的多个进程,而不是单个进程中的线程,因此 COINIT_MULTITHREADED 不是问题。

来自 MTA 的一些 MS 文档的这段代码似乎一切都应该开箱即用:

多个客户端可以同时从不同线程调用支持自由线程的对象。 在自由线程的进程外服务器中,COM 通过 RPC 子系统在服务器进程中创建一个线程池,并且客户端调用(或多个客户端调用)可以由这些线程中的任何一个在任意时间传递。时间

最佳答案

我一问就找到了答案,你需要在stdafx.h中指定#define _ATL_FREE_THREADED

关于com - 具有 MTA 的进程外 COM 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795320/

相关文章:

python - 使用 Python comtypes 库将查询表添加到 Excel 时出现问题

c - SHCreateItemFromParsingName 在指定文件名时返回 FILE_NOT_FOUND

go - CoInitializeEx(COINIT_MULTITHREADED) 和使用 WMI 的协程

linux - [alternatives --config mta] 显示的意思是什么?

c++ - 跨 COM 边界传递 CComSafeArray

C# COM 对象 VBA 函数或接口(interface)标记为受限或函数使用不受支持的自动化类型

c++ - 在初始化/激活 ActiveX 控件后,如何获取该控件的 HWND?

c++ - 奇怪的双指针空检查

c++ - ATL/COM:为什么 CComSafeArray::GetCount() 会为空数组引发异常?

c# - 从多个线程调用 STA COM 对象的 MTA 控制台应用程序