我是否需要使用DLL分发头文件和lib文件?

aud*_*tic 5 c++ dll shared-libraries visual-c++

我正在为客户更新DLL,并且由于公司政治等因素,我的公司决定不再与客户共享源代码.

先前.我假设他们拥有所有源代码并将其作为VC++ 6项目导入.现在他们将不得不链接到预编译的DLL.我想,至少,我需要*.lib使用DLL 分发文件,以便可以定义DLL入口点.但是,我是否还需要分发头文件?

如果我可以逃避不分发它,客户将如何将DLL导入其代码?

Chr*_*phe 13

是的,您需要将标题与.lib和.dll一起分发

为什么?

至少有两个原因:

  • 因为C++需要知道库中函数的返回类型和参数(粗略地说,大多数编译器使用名称修改,将C++函数签名映射到库入口点).
  • 因为如果您的库使用类,C++编译器需要知道它们的布局以在库客户机中生成代码(例如,要在堆栈中放置多少字节用于参数传递).

附加说明:如果您要问这个问题,因为您想隐藏标题中的实现细节,您可以考虑使用pimpl成语.但这需要对代码进行一些重构,并且还会在性能方面产生一些影响,因此请仔细考虑


R S*_*ahu 5

但是,我是否还需要分发头文件?

是.否则,您的客户必须先手动声明这些功能,然后才能使用它们.可以想象,这将是非常容易出错和调试的噩梦.