Lib和DLL链接到exe错误“无法读取0x300”

时间:2011-12-22 04:49:03

标签: c++ visual-studio deployment dll

我有一个关于如何使用.dll / .libs的一般性问题。我正在创建一个.dll用于我的项目,但是,我注意到当我去编译时,我需要静态链接与.dll关联的.lib以便编译项目(否则会出现链接错误“致命错误LNK1107:文件无效或损坏:无法读取0x300“)。所以稍后当我重新启动我的项目,然后在将来更新它时,我是否需要发布一个新的.exe和一个新的.dll而不是一个新的.dll?如果是这种情况,那么为什么还要使用.dll?

1 个答案:

答案 0 :(得分:30)

.lib包含DLL导出的函数等的存根。您将.lib链接到您的EXE,现在您的EXE知道如何调用这些函数。但当然没有任何功能 - 电话无处可去。在加载时,当操作系统加载你的EXE时,它也加载你的DLL,然后它修补EXE - EXE调用存根的地方,加载器用调用DLL中的实际函数来替换它。

通常,您无需将.lib发送给您的客户。但是,如果您的客户想要编写自己的使用DLL的EXE,那么您需要向他们发送.lib,以便他们可以将EXE链接到它。

链接器错误LNK1107表示您已尝试链接到DLL而不是.lib。这总是错误的,因为根据定义,DLL在运行时动态链接,而不是在构建时静态链接。