【问题标题】:Why COM DLLs exports should be marked "PRIVATE"?为什么 COM DLL 导出应标记为“PRIVATE”?
【发布时间】:2013-08-31 09:58:30
【问题描述】:

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

【问题讨论】:

    标签: c++ c dll com


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      相关资源
      最近更新 更多