gpt4 book ai didi

c++ - 重命名 DLL 会导致使用它的代码崩溃

转载 作者:行者123 更新时间:2023-11-30 01:30:30 25 4
gpt4 key购买 nike

我有一个用 native C++ 编写的 DLL。 Visual Studio 项目名称为 MyDll,它在输出目录中编译为名为 MyDll.dll 的文件。

编译后,我将其重命名为MyDll2.dll。 (这个例子看起来很傻,但我有充分的理由重命名它。)

用 C++/CLI 编写的第二个项目使用此 DLL。

在编译时,此项目引用MyDll.lib(在编译MyDll 时生成),以便能够使用dll 中定义的类。

在运行时,为了加载 DLL,我调用了 LoadLibrary,将文件 C:\...\MyDll2.dll 的完整路径传递给它(它实际上位于同一文件夹中)。它加载成功,如 LoadLibrary 的返回值所示。

在我使用 DLL 中定义的类(只是在堆栈上声明一个对象)的代码中第一次出现时,它因 SEHException 而崩溃(这些异常不提供有关原因的任何信息崩溃的...)

只有在我执行重命名步骤时才会发生这种情况。如果我将它保留为 MyDll.dll 并对该文件调用 LoadLibrary,一切正常。所以这显然是由于重命名。

有什么想法吗?我不允许重命名 DLL 吗?

(编辑:通过提供更多细节来澄清)

最佳答案

在构建 dll 时,链接器还会生成一个 lib 文件,您可以使用该文件在可执行文件中进行链接。此 lib 文件包含从中导入导出函数和数据的 dll 名称。因此,您的可执行文件中包含对原始名称 dll 的引用。

关于c++ - 重命名 DLL 会导致使用它的代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4397208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com