3

我正在学习如何实现进程外 COM 服务器,并遇到了这篇代码项目文章,构建本地 COM 服务器和客户端:一步一步的示例

我可以构建它,它运行良好,但是代理/存根 DLL 在哪里?我所能看到的只是在构建过程中生成代理/存根代码的 IDL 文件。但是 DLL 是如何构建的,它在哪里呢?

4

2 回答 2

6

简短的回答是所有接口都标记为“oleautomation”,因此 oleaut32.dll 执行编组,因为 COM 知道如何编组接口中使用的所有类型。

如果缺少“oleautomation”,或者指定了 COM 在默认情况下不知道如何编组的类型(请参阅此处的列表),则需要您的非默认编组器及其存根。

于 2012-10-24T22:02:21.363 回答
4

您需要 Proxy/Stub 项目来帮助 COM 编组您的接口。当您使用 Visual Studio 创建 ATL C++ 项目时,通常会自动创建一个带有 PS 后缀的辅助项目,这就是您的代理/存根 DLL。但是,如果没有它,你可能会做得很好(我个人从来不需要构建和使用它,即使我确实必须处理诸如自定义编组之类的事情)。如果您在项目中提供类型库,则它已注册并满足某些条件 - COM 将为您提供自动代理/存根对。

额外阅读:

于 2012-10-20T09:17:17.123 回答