Я использую компилятор mingw и IDE блоков кода. Я сталкиваюсь с проблемой, в которой я не понимаю, почему мой dll экспортирует каждую функцию без меня, даже используя __declspec(dllexport)
с этими функциями. Вот два примера файлов: main.h
и main.cpp
:
main.h
#ifndef __MAIN_H__
#define __MAIN_H__
#include windows.h
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
void SomeFunction(const LPCSTR sometext);
#ifdef __cplusplus
}
#endif
#endif // __MAIN_H__
main.cpp
:
#include "main.h"
void SomeFunction(const LPCSTR sometext)
{
MessageBoxA(0, sometext, "DLL fxn Message", MB_OK | MB_ICONINFORMATION);
}
bool flag = false;
extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
flag = true;
return TRUE; // succesful
}
В этом примере SomeFunction
экспортируется, и я могу динамически вызывать его из приложения извне, хотя я не прототипировал его как
void __declspec(dllexport) SomeFunction(const LPSTR sometext);
Мало того, даже глобальная переменная flag
экспортируется в автоматически сгенерированный файл .def.
Что здесь происходит? Пожалуйста, помогите и исправьте меня, если я делаю техническую ошибку.