首页 > 解决方案 > 从链接到另一个 dll 的 dll 使用我的 exe 时,访问冲突执行位置 0x0000

问题描述

这是我的程序。
https://github.com/ILLmew/Seagull-Engine-v2

简而言之,这是我为学习新事物而编写的一个小型游戏引擎,问题是:
我有一个 SCore.dll 用于基本设施,所有其他模块都使用它来做其他事情。现在我有一个链接到 SCore.dll 的 SRendererVulkan.dll 和我的应用程序 Sandbox.exe,它在加载时而不是运行时链接 SCore.dll 和 SRendererVulkan.dll。

像下面这样:

SCore.dll -------> SRendererVulkan.dll -------> Sandbox.exe  
     |                                               ^
     |                                               |
     -------------------------------------------------  

在VS2019中编译时,没有编译错误或链接错误。当我运行程序时,我放了一些断点来检查 vulkan 的资源是否已初始化,并且似乎整个初始化成功,一切都很好。没有 nullptr 检查失败,它显示了窗口。但是当我关闭窗口并进入关机阶段时,它会做出断言:
访问冲突执行位置 0x0000000000000000

我使用 premake 作为构建工具,上面的 dll 所有链接都指向eastl.lib 和 mimalloc.lib。

我尝试了很多方法,包括导出 SRendererVulkan.dll 的后端或在 VulkanRenderDevice 中导出整个类,但都失败了。

我知道这是一个链接错误,但我无法解决它,所以我来到这里寻求帮助。

标签: c++dlllinkervulkan

解决方案


我在exe中新建()SRendererVulkan.dll并在SCore.dll中将其删除。所以创建成功,但销毁失败。由于此操作,它会引发删除相应内存分配块的失败,从而导致此错误。


推荐阅读