c++ - Lib 和 DLL 链接到 exe 错误 "cannot read at 0x300"

标签 c++ visual-studio deployment dll

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

最佳答案

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

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

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

关于c++ - Lib 和 DLL 链接到 exe 错误 "cannot read at 0x300",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599539/

相关文章:

deployment - 在 Windows 环境中拉取部署

c++ - 如何将模板参数包转换为函数的多个指针参数?

java - C++ 与托管中这些指针错误的后果

c++ - GCC 选项 : warning on non-void functions without a return statement

visual-studio - 替代 stringstream 以 boost 速度

Visual Studio 中的 R 函数定义与 R 函数定义桂瑞

maven部署:deploy-file fails (409 Conflict),但 Artifact 上传成功

c++ - QAbstractTableModel 和 Unicode(德语变音符号)

visual-studio - Vb6 拖放 HTML 数据

sql - 无法将 SSIS 项目部署到 SQL Server