gpt4 book ai didi

c++ - 为什么 COM DLL 导出应标记为 "PRIVATE"?

转载 作者:可可西里 更新时间:2023-11-01 17:37:02 25 4
gpt4 key购买 nike

在构建 COM DLL 时,为什么要导出 DllGetClassObjectDllCanUnloadNowDllRegisterServerDllUnregisterServer 等。在关联的 .DEF 文件的 EXPORTS 部分中标记为 PRIVATE

最佳答案

当您构建一个 DLL 时,链接器会自动为该 DLL 创建一个导入库。它包含所有导出函数的列表。您在另一个使用 DLL 的项目中使用该导入库。

特定于 COM 服务器的是,这 4 个导出函数总是通过 GetProcAddress() 找到,并且您永远不会隐式依赖于 COM dll。您始终使用 CoCreateInstance() 创建 COM 对象,COM 管道负责定位 DLL 并使用 GetProcAddress() 查找 DllGetClassObject() 函数。 Regsvr32.exe 发现的 DllUn/RegisterServer 也是如此。和 DllCanUnloadNow,由 COM 管道发现。因此,您不需要导入库。

使用 PRIVATE 可确保函数不会导出到导入库。由于它们都是私有(private)的,因此您根本没有导入库。如果您省略它,不会有任何问题,您只是从链接器中获得一个您永远不会使用的额外文件。

关于c++ - 为什么 COM DLL 导出应标记为 "PRIVATE"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18486020/

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