gpt4 book ai didi

c++ - 如何在DLL和exe中使用Glad

转载 作者:行者123 更新时间:2023-12-02 10:10:46 25 4
gpt4 key购买 nike

有没有办法在DLL和exe中使用Glad?我感觉可能有问题,因为DLL具有与exe分开的自己的内存空间,但是我不确定如何重构我的代码来表示这一点。
我的情况是,我有一个游戏引擎,其中包含许多使用OpenGL函数的方法,这些方法很容易加载,例如着色器,纹理以及其他与渲染相关的东西。但是,我将引擎导出为dll(出于各种其他原因),并且运行时编辑器链接到该dll。该运行时编辑器还需要访问高兴函数,因为它静态链接到imgui,后者需要相同的窗口上下文和所有内容,并且假设如果我在dll和exe中调用了gladLoadGL(),我将获得不同的函数指针,这意味着它们将不会对相同的数据进行操作。有什么办法吗?我也尝试将GLFW链接为DLL,但这没有帮助(这很有意义,因为这是一个令人高兴的问题)。如果我没有在自己的exe文件中执行gladLoadGL(),则在尝试执行gl函数时会得到nullptr异常(因为在运行时编辑器中只有少数几种情况下使用glFunctions)。但是,如果我确实在exe中运行了GladLoadGL(),它将加载新的函数指针,这将使所有内容丢失,并且我在ImGui中遇到错误,我认为这是因为高兴地在DLL和exe中加载了不同的函数指针。
可以做到这一点,还是我需要重新考虑整体架构?
编辑:这样我的原始问题得到了回答,您不必做任何特殊的事情(除了在DLL和exe中加载高兴的函数)。但是,这在我的代码中引起了一个新问题,这似乎是实际问题所在。现在,我在DLL中有一个类似于以下内容的类:

// In the DLL
class __declspec(dllexport) Application
{
Application();

void Construct(); // I added this because the base constructor would not be called

virtual void SomeFunc() {} // These are overridden by whoever inherits this class
virtual void SomeOtherFunc() {}
}

// In the exe
class MyApp : public Application
{
MyApp()
{
Construct() // This raises a runtime exception that says the method could not be found.
//Is there any way to make sure I export and import this correctly as well?
}
}
编辑2 :结果发现我只是错过了一个构建步骤,并且从未将我的dll复制到该exe所在的位置。再次感谢您的所有帮助

最佳答案

重要的是要记住指针变量与其指向的变量之间的区别。如果DLL中有一个GLAD实例,而EXE中有另一个实例,则对于每个GLAD函数指针,您将有两个指针变量。
但是,它们都指向相同的功能。它们都是在为同一OpenGL上下文加载所有函数指针之后。因此,这些指针将指向相同的功能。
因此,尽管从技术上讲您将浪费一些存储空间(因为DLL和EXE都需要指针变量),但只要加载指针时OpenGL上下文是最新的,它就仍然可以正常工作。

关于c++ - 如何在DLL和exe中使用Glad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63625272/

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