//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
// Unmanaged.cpp : Definiuje punkt wejścia dla aplikacji DLL.
//

#include "stdafx.h"
#include "Unmanaged.h"
#include "stdio.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
    return TRUE;
}
UNMANAGED_API void StringCallback(LPWSTR *stringArray, int stringCount, void (__stdcall* function)(int, LPWSTR))
{
	for(int i = 0; i<stringCount;i++)
	{
		function(i, stringArray[i]);
	}
}
UNMANAGED_API void IntegerCallback(int * ia, int intCount, void (__stdcall* function)(int, int))
{
	for(int i = 0; i<intCount;i++)
	{
		function(i, ia[i]);
	}
}
UNMANAGED_API void FloatCallback(float * fa, int floatCount, void (__stdcall* function)(int, float))
{
	for(int i = 0; i<floatCount;i++)
	{
		function(i, fa[i]);
	}
}
UNMANAGED_API void DoubleCallback(double * da, int doubleCount, void (__stdcall* function)(int, double))
{
	for(int i = 0; i<doubleCount;i++)
	{
		function(i, da[i]);
	}
}
