作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在构建 COM DLL 时,为什么要导出 DllGetClassObject
、DllCanUnloadNow
、DllRegisterServer
、DllUnregisterServer
等。在关联的 .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/
我是一名优秀的程序员,十分优秀!