c++ - MSXML 是如何工作的? (进程内 COM 对象的工作原理)

标签 c++ c xml msxml msxml6

我不是组件对象模型 (COM) 方面的专家,但据我了解,它的工作原理如下: 程序 A(“服务器”程序)通过 TLB 文件公开 COM 接口(interface)。 客户端程序使用此接口(interface)并调用它的函数(所有底层的东西都是免费为您完成的)。 所以在这种情况下,当“服务器”程序正在运行并且“客户端”程序使用 COM 对象与“服务器”通信时。 每个程序(进程)都有自己的地址空间。 现在使用 MSXML 有点不同。 据我所知,msxmlX.dll 是一个 COM dll,但可以说当我在运行时隐式链接它(使用 msxmlX.h 和 msxmlX.lib)时,它被加载到与我的可执行文件相同的内存空间。 所以,在这种情况下,为什么在明显没有 IPC 进行时使用 COM 对象(msxml.dll 和“我的应用程序”都使用相同的内存并且可以像调用函数一样简单地“通信”)???

最佳答案

您可以在进程中、进程外或完全在另一台机器上创建 COM 对象。选择哪个取决于您的要求。

COM 旨在使软件组件可重用且独立于语言。 它不仅仅是您假设的促进 IPC 的机制。

关于c++ - MSXML 是如何工作的? (进程内 COM 对象的工作原理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17750605/

相关文章:

c++ - C++中的字符串连接问题

c++ - 在 C++ 运算符中调用析构函数以释放内存的正确方法是什么?

c# - 通过 Pinvoke 传递 C# 字符串

c - fopen/fgets 使用 char* 而不是 FILE*,为什么这样行得通?

python - 如何在XPath中选择多个标签?

html - XML/HTML 标签内的空白

c++ - C++ ABI 是否指定 vTable 和 RTTI 信息应该如何存在?

c++ - 错误 : no matching function for call to ‘BSTreeNode<int, int>::BSTreeNode(int, int, NULL, NULL)’ - what's wrong?

c - 为什么这个带有 "abort()"的 C 程序不会崩溃?

c# - Linq 查询 XML 以选择子节点的多个元素