在构建 COM DLL 时,为什么要在关联文件的部分中标记 、 、 、DllGetClassObject
等DllCanUnloadNow
导出DllRegisterServer
?DllUnregisterServer
PRIVATE
EXPORTS
.DEF
问问题
1168 次
1 回答
14
构建 DLL 时,链接器会自动为 DLL 创建导入库。它包含所有导出函数的列表。您在另一个使用 DLL 的项目中使用该导入库。
特定于 COM 服务器的是,始终可以使用 GetProcAddress() 找到这 4 个导出函数,并且您永远不会隐式依赖于 COM dll。您总是使用 CoCreateInstance() 创建 COM 对象,COM 管道负责定位 DLL 并使用 GetProcAddress() 来查找 DllGetClassObject() 函数。Regsvr32.exe 发现的 DllUn/RegisterServer 也是如此。和 DllCanUnloadNow,由 COM 管道找到。因此,您不需要导入库。
使用 PRIVATE 可确保函数不会导出到导入库。由于它们都是私有的,因此您根本没有导入库。如果您忽略它,一切都不会出错,您只会从链接器中获得一个永远不会使用的额外文件。
于 2013-08-28T11:24:44.570 回答