//
// 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.
//
// 
// Poniższy blok ifdef to standardowa metoda tworzenia makr, która znacznie ułatwia  
// eksport bibliotek DLL. Wszystkie pliki w tej bibliotece DLL są kompilowane z użyciem
// symbolu UNMANAGED_EXPORTS zdefiniowanego w wierszu poleceń. Ten symbol nie powinien być
// definiowany w żadnym projekcie wykorzustującym ten DLL. W ten sposób dowolny inny projekt,
// którego pliki źródłowe obejmują ten plik, będzie traktował funkcje UNMANAGED_API jako
// zaimportowane z biblioteki, podczas gdy ta biblioteka potraktuje symbole zdefiniowane
// w tym makro jako wyeksportowane.
#ifdef UNMANAGED_EXPORTS
#define UNMANAGED_API __declspec(dllexport)
#else
#define UNMANAGED_API __declspec(dllimport)
#endif

extern "C"
{
typedef struct _complex
{
	float re;
	float im;
} complex;
UNMANAGED_API void DateFunction(DATE date, wchar_t *fmtDate, int dateBufLen);
UNMANAGED_API int StringFunction(LPCTSTR str);
UNMANAGED_API LPSTR Add(LPCSTR a, LPCSTR b);
UNMANAGED_API int IntArrayFunction(int *pia, int length);
UNMANAGED_API float FloatArrayFunction(float *pfa, int length);
UNMANAGED_API void CurrencyFunction(CURRENCY cur, CURRENCY *d);
UNMANAGED_API VARIANT VariantFunction(LPVARIANT var);
UNMANAGED_API complex ComplexAdd(complex a, complex b);
UNMANAGED_API int OutFunction(int i, int *r);
UNMANAGED_API int Average( int first, ... );
};
