gpt4 book ai didi

c++ - 传统DLL和COM DLL的区别

转载 作者:IT老高 更新时间:2023-10-28 12:46:30 27 4
gpt4 key购买 nike

我目前正在学习 COM。我发现 COM DLL 有点建立在传统的 DLL 基础结构之上。当我们构建 COM DLL 时,我们仍然依靠传统的 DLL 导出方法来引导我们进入内部 COM 协同类。

如果COM是为了二进制级别的组件重用,我认为传统的DLL可以达到同样的效果。它们都暴露了函数,它们都是二进制的,那么转向 COM 方法有什么意义呢?

目前我的感觉是传统的DLL以“flat”的方式暴露方法,而COM DLL以“OOP”的层次结构方式暴露方法。 OOP 方式似乎是一种更好的方法。这可能是COM盛行的原因吗?

非常感谢。

最佳答案

不,有很大的不同。 COM 有一个定义良好的协议(protocol),用于创建对象、公开方法、管理内存、发布类型信息、管理线程。几乎没有一种语言不支持使用 COM 服务器,无论它是用什么语言编写的。

您不会通过直接公开自己的函数来获得它。这可能只能在用 C/C++ 编写的程序中使用(因此它可以读取你的头文件),使用完全相同版本的 C++ 编译器编译,并且不乏各种互操作问题。像暴露 std::string 这样的 C++ 类对象这样简单的事情是不安全的。内存布局既不能保证兼容,也没有任何类型的内存所有权协议(protocol)。

它可能更 OOPy,COM 不支持继承,因为 OOP 在二进制级别很难兼容。这个问题需要所有代码都支持的运行时支持,如 .NET 和 Java 等 VM。

关于c++ - 传统DLL和COM DLL的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3016683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com