Я строю код dll, но некоторые переменные дают сбой
Я создал экземпляр для вызова функций в другом файле
main.h
#include <Windows.h>
#include <iomanip>
class MyClass {
public:
using Pointer = std::unique_ptr<MyClass>;
bool enable;
MyClass();
~MyClass();
void MyFunc();
};
main. cpp
#include "pch.h"
#include "main.h"
MyClass::MyClass()
{
enable = true;
}
MyClass::~MyClass()
{
}
void MyClass::MyFunc()
{
if (enable) { //crash occurs here
enable = false;
MessageBoxA(NULL, "enable is true", "Test", 0);
}
}
pclass.h
#include "main.h"
class MyClass2 {
public:
MyClass2();
MyClass &cl() const;
private:
MyClass::Pointer CClass;
};
pclass. cpp
#include "pch.h"
#include <windows.h>
#include "pclass.h"
MyClass2::MyClass2() : CClass() {}
MyClass& MyClass2::cl() const {
return *CClass;
}
instance.h
#include "pclass.h"
class MyIntance {
public:
static MyIntance& Instance() {
static MyIntance inst;
return inst;
}
MyIntance(MyIntance const&) = delete;
void operator=(MyIntance const&) = delete;
MyClass2 &ini();
private:
MyIntance();
private:
MyClass2 inst_check;
};
экземпляр. cpp
#include "pch.h"
#include <windows.h>
#include "instance.h"
MyIntance::MyIntance() : inst_check() {}
MyClass2 &MyIntance::ini() {
return inst_check;
}
dllmain. cpp
#include "pch.h"
#include "instance.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MyIntance::Instance().ini().cl().MyFunc();
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Я не знаю, почему происходит сбой.
Если я удалю enable
переменная и оставить только MessageBoxA
функция будет работать нормально
ошибка изображения
https://i.stack.imgur.com/rQjES.png