#define BIBLIOTEKA_DLL __declspec(dllexport)
#include "biblioteka.h"

// Przyklad eksportowanej zmiennej
extern BIBLIOTEKA_DLL int eksportowana_zmienna = 0;

// Przyklas eksportowanej funkcji
BIBLIOTEKA_DLL void Komunikat(TCHAR *tekst)
{
	MessageBox(NULL, tekst, TEXT("Funkcja"), MB_OK);
}

void KlasaTestowa::Komunikat(TCHAR *tekst)
{
	MessageBox(NULL, tekst, TEXT("Metoda klasy"), MB_OK);
}

// Funkcja nie eksportowana
int Funkcja()
{
	return 42;
}

BIBLIOTEKA_DLL KlasaTestowa* Create()
{
	return new KlasaTestowa();
}

BIBLIOTEKA_DLL void Free(KlasaTestowa *d)
{
	delete d;
}

BOOL APIENTRY DllMain(HMODULE hModule,
	DWORD  ul_reason_for_call,
	LPVOID lpReserved
	)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		MessageBox(NULL, TEXT("Reason = DLL_PROCESS_ATTACH"), TEXT("Funkcja DllMain"), MB_OK);
		break;
	case DLL_THREAD_ATTACH:
		MessageBox(NULL, TEXT("Reason = DLL_THREAD_ATTACH"), TEXT("Funkcja DllMain"), MB_OK);
		break;
	case DLL_THREAD_DETACH:
		MessageBox(NULL, TEXT("Reason = DLL_THREAD_DETACH"), TEXT("Funkcja DllMain"), MB_OK);
		break;
	case DLL_PROCESS_DETACH:
		MessageBox(NULL, TEXT("Reason = DLL_PROCESS_DETACH"), TEXT("Funkcja DllMain"), MB_OK);
		break;
	}
	return TRUE;
}


