'glfwCreateWindow() doesnt work out of DLL`s EntryPoint

I have .dll file with my Game Engine and .exe with game. .exe uses .dll

Both of them use glfw_mt.lib. In dll There is Window class (Window.cpp,Window.h) where i try to glfwCreateWindow(), but it returns NULL. HOWEVER when i try it in dlls main function (EntryPoint.h) glfwCreateWindow() works fine.

My Window abstractionm fails to create glfw window. I see no reason EntryPoint.h in dll

#include "Core.h"
#include "Game.h"
#include "Window.h"
#include "glad/glad.h"
#include "GLFW/glfw3.h"

#ifdef NK_PLATFORM_WINDOWS

#define NIKSON_START Nikson::Game* CreateGame(){return
#define NIKSON_END }
extern NIKSON_API Nikson::Game* CreateGame();
static void callback(int error_code, const char* description) {
    std::cout << "GLFW ERROR:" << error_code << " " << description << std::endl;
}
int main() 
{
    LOG("LOADED!");glfwSetErrorCallback(callback);
    if (!glfwInit())
    {
        LOG("GLFW ERROR");
    }
    
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    
    //GLFWwindow* win = glfwCreateWindow(1000, 1000, "Nikson", NULL, NULL);

    //  LOG(win)
    //
    ///*if (win==nullptr) {
    //  LOG("FAILED TO CREATE WINDOW")
    //  return 0;
    //}*/
    //glfwMakeContextCurrent(win);
    Nikson::Window* win = Nikson::CreateWindow("Nikson",1000,1000);
    std::cin.get();
    //Nikson::Game * game= CreateGame();
    ////Nikson::Window* win = new Nikson::Window();
    //game->Run();
    delete win;
}
#endif 

Window.h

#pragma once
#include "Core.h"
#include "glad/glad.h"
#include "GLFW/glfw3.h"

namespace Nikson {
    struct WindowProp {
        std::string Title;
        uint32_t Width;
        uint32_t Height;
        GLFWwindow* WindowPtr;
    };
    
    class NIKSON_API Window
    {
    public:
        Window(GLFWwindow* window, const std::string& title = "Nikson",
            uint32_t width = 1600,
            uint32_t height = 900);
        void Tick();
    private:
        WindowProp m_Properities;
        
        
    };
    NIKSON_API Nikson::Window*  CreateWindow(const std::string& title = "Nikson",
        uint32_t width = 1600,
        uint32_t height = 900);
} 

Window.cpp

#include "Window.h"

namespace Nikson
{
    
    Window::Window(GLFWwindow* window, const std::string& title,
        uint32_t width,
        uint32_t height)
    {
        m_Properities.Title = title;
        m_Properities.Width=width;
        m_Properities.Height=height;
        m_Properities.WindowPtr = window;
        
    }
    void Window::Tick() {
        glfwPollEvents();
    }
    Nikson::Window* CreateWindow(const std::string& title,
        uint32_t width,
        uint32_t height) 
    {
        GLFWwindow* win = glfwCreateWindow(1000,1000,"Nikson", NULL, NULL);
        if (win == NULL) {
            LOG(win)
        }
        /*if (win==nullptr) {
            LOG("FAILED TO CREATE WINDOW")
            return 0;
        }*/
        glfwMakeContextCurrent(win);
        return new Nikson::Window(win, title, width, height);
    }

}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source