我的 $Foo ATL 解决方案中的 ($Foo)PS 项目有何用途?

2024-01-23

在MSVC中创建一个ATL项目似乎创建的不是一个而是两个项目;后者的名称与前者相同,但名称后附加了 PS。第二个项目的目的是什么?我如何判断我是否需要它?


COM 支持跨两个不同的线程、两个不同的进程或两台不同的机器进行接口方法调用。这就是所谓的编组。两个不同的线程是最常见的情况,COM 服务器通常不是线程安全的。 COM 通过将来自“错误”线程的调用编组到创建服务器的线程来为此类单线程组件类实现线程安全。当您编写进程外服务器时,进程之间会发生封送处理。不同机器之间跨网络的称为DCOM。

这是通过创建一个看起来像的接口实例来实现的exactly就像原来的一样。但接口的所有方法实际上都是替代品,它们负责编组调用的工作。这是代理。电线的另一端有一个替代品,看起来exactly类似于界面,但做相反的工作。这是存根。代理和存根协同工作,营造出您正在程序中进行简单方法调用的错觉。

代理的主要工作是将方法调用的参数序列化到内存缓冲区或网络数据包中。这可能非常简单,尤其是当您使用指向可变大小结构的指针时。 COM 需要帮助才能做到这一点,这就是 FooPS 项目的工作。当您在 .idl 文件上运行 midl.exe 时,midl 会根据接口定义自动生成代码以实现代理和存根。这通常已经足够好了,但如果 IDL 中的内置关键字不足以描述您的数据,您可能需要实现自己的关键字。

最后但并非最不重要的一点是,Windows 提供了一个标准的编组器,可以编组简单的接口。旨在支持 COM 自动化定义的 COM 子集。换句话说,从 IDispatch 派生并且仅使用自动化兼容类型的接口。您只需要正确获取注册表项即可启用它,否则不需要 midl 生成的代理/存根。当然,如果您只在一个线程上进行简单的进程内调用,那么您也不需要它。这很常见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 $Foo ATL 解决方案中的 ($Foo)PS 项目有何用途? 的相关文章

随机推荐

  • 同时调用或调用多个方法?

    如何在asp net中的页面加载中同时调用多个方法 我有 4 个方法可以在页面加载事件中调用 但我想调用所有 4 个方法 而不是等待第一个方法完成然后调用第二个方法 在asp net 4 0中如何实现这一点 首先 重要的是要知道你所做的事情
  • 为什么 spring-websocket 中的 STOMP 功能依赖于 Spring MVC?

    目前 我正在尝试使用 webflux 将 STOMP 与 websockets 结合使用 为了向 STOMP 主题发送消息 我需要使用SimpMessagingTemplate 这是我添加时由 spring boot 自动配置提供的 Ena
  • 将字节数组转换为任意基数

    我有一个字节数组 任意长度 我想使用我自己的基本编码器将此数组编码为字符串 在 NET是标准的Base64编码器 但是如果我想将数组编码为Base62 Base53 or Base13 是否有可能创建这样的通用基础编码器 我知道我可以用简单
  • 无法安装 expo 包并出现错误:yarnpkg 退出时显示非零代码:1 yarnpkg 退出时显示非零代码:1

    我目前正在尝试使用以下命令将我的 Expo SDK 从 36 0 0 更新到至少 37 0 0expo update但是我收到错误 Failed to install expo package with error yarnpkg exit
  • 具有默认参数的 JavaScript 函数

    我目前使用以下函数来检查三个参数以查看是否有任何参数通过 这是在没有发送参数的情况下设置默认值的最佳方法吗 function setupSlideshow t e s e e slideshow s s gt li t t 70 timeo
  • 与我的模型相关,我应该有多少个 DbContext 子类?

    我正在学习 ASP NET MVC 但我遇到了一些问题 到目前为止我读过的教程还没有以涵盖我的方式进行探讨 我尝试过搜索 但没有看到任何询问此问题的问题 不过 如果我错过了现有的 请原谅我 如果我有一个 ASP NET MVC 应用程序 它
  • 如何解决重叠实例

    我有以下代码 转换类似于转换 instance OVERLAPS Transformable a a where transform x x instance OVERLAPPABLE Transformable l l Transform
  • MySQL 上的奇怪完整性错误:#1452

    这有点奇怪 但我会尽力解释 我有 2 个模型 一个代表电子邮件消息 Message 另一个代表销售线索 AffiliateLead 当通过网站提交表单时 系统会生成潜在客户 然后发送电子邮件 消息模型有一个可选的 FK 返回到领导 从消息模
  • 使用 ExtJS 网格列标题中的 ListFilter 进行远程过滤

    我正在使用 ListFilter 插件来过滤网格面板上的结果 列定义是 header Provider filter type list store Ext getStore MyApp store Provider dataIndex p
  • 如何将数据从 iOS 发送回 Flutter?

    我正在尝试让 iOS 将数据发送回 flutter 更具体地说 是控制中心媒体控制 我正在开发一个音乐应用程序 我可以获取从 Flutter 发送到 iOS 的数据 从而允许它显示在媒体控件中 但是 如果我要控制播放暂停下一个上一个 我该如
  • Django:按月/年分组的日期属性的总和

    我想将此查询从 SQL 放入 Django select date format date Y m as month sum quantity as hours from hourentries group by date format d
  • VBA 代码无法连接到 SQL Server 2008

    我的代码无法连接到 Microsoft SQL Server 2008 中的数据库 它尝试连接 但随后出现以下错误 运行时错误 SQL Server 不存在或访问被拒绝 服务器受密码保护 但我认为是我造成的 任何帮助将不胜感激 发生错误的地
  • 如何仅翻转变换矩阵的一个轴?

    我有一个 4x4 变换矩阵 然而 在尝试转换后我注意到这个动作andY 轴的旋转方向相反 其余的都是正确的 我从其他一些 API 获得了这个矩阵 所以可能是坐标系的差异 那么 如何翻转变换矩阵的轴呢 如果只有平移 我可以在 Y 平移上添加减
  • 查找类以按名称实例化,无需命名空间或程序集? (。网)

    我想按名称 字符串 实例化一个类 而不指定命名空间或程序集 像这样 Unity语法 var processor container Resolve
  • HttpClient 与 HttpWebRequest

    我有一个大文件 我必须将其发送到 Web api 客户端 数据是多部分的 问题是 如果文件是通过 http Web 请求发送的 那么它会在 webapi 上快速上传 对于此请求 文件内容直接写入请求流 就好像通过 Httpclient ne
  • 绕过 Rsync 提示“您确定要继续连接吗”

    如何绕过这个问题或添加一个自动回答这个问题的标志 因为我正在尝试编写一个脚本 并且这个问题不断停止 rsync 的过程 因为在提示时无法在脚本中回答这个问题 Set the StrictHostKeyChecking选项no 在配置文件中或
  • OpenCV-Python 中的简单数字识别 OCR

    我正在尝试在 OpenCV Python cv2 中实现 数字识别 OCR 它仅用于学习目的 我想学习 OpenCV 中的 KNearest 和 SVM 功能 我有每个数字 100 个样本 即图像 我想和他们一起训练 有一个样本letter
  • 通过 Java 使用 Selenium Webdriver 缺少 size() 选项

    一直在参加一些课程来提高我使用 Selenium Webdriver 的自动化技能 我没有size 方法作为尝试计算页面内链接数量时的一个选项 我缺少一些罐子吗 导入库 java public static void main String
  • SVG 坐标系 - 点与像素

    阅读通过SVG 1 1 规范 http www w3 org TR SVG11 coords html 我试图理解用于定义初始视口的单位与文档其余部分使用的单位之间的关系 如果视口最初是使用点定义的
  • 我的 $Foo ATL 解决方案中的 ($Foo)PS 项目有何用途?

    在MSVC中创建一个ATL项目似乎创建的不是一个而是两个项目 后者的名称与前者相同 但名称后附加了 PS 第二个项目的目的是什么 我如何判断我是否需要它 COM 支持跨两个不同的线程 两个不同的进程或两台不同的机器进行接口方法调用 这就是所