#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <tchar.h>
#include <iostream>
using
namespace
std;
extern
"C"
__declspec
(
dllexport
)
int
main(
int
argc,
char
** argv);
void
FreeImage_test(
HINSTANCE
hinstLib,
wchar_t
* pathfile);
wchar_t
* charToWChar(
const
char
* text);
typedef
DWORD
(__stdcall *FreeImage_GetFileTypeU)(
const
wchar_t
* lpszPathName,
int
flag);
typedef
DWORD
(__stdcall *FreeImage_Initialise)(
BOOL
load_local_plugins_only);
typedef
DWORD
(__stdcall *FreeImage_DeInitialise)();
typedef
DWORD
(__stdcall *FreeImage_LoadU)(
DWORD
format,
const
wchar_t
* lpszPathName,
int
flag);
typedef
DWORD
(__stdcall *FreeImage_UnLoad)(
DWORD
dib);
typedef
DWORD
(__stdcall *FreeImage_GetFIFFromFilenameU)(
const
wchar_t
* lpszPathName); FreeImage_GetFIFFromFilenameU GetFIFFromFilenameU;
typedef
DWORD
(__stdcall *FreeImage_GetDotsPerMeterX)(
DWORD
dib); FreeImage_GetDotsPerMeterX GetDotsPerMeterX;
typedef
DWORD
(__stdcall *FreeImage_GetDotsPerMeterY)(
DWORD
dib); FreeImage_GetDotsPerMeterY GetDotsPerMeterY;
typedef
DWORD
(__stdcall *FreeImage_GetTransparencyCount)(
DWORD
dib); FreeImage_GetTransparencyCount GetTransparencyCount;
typedef
DWORD
(__stdcall *FreeImage_GetTransparencyTable)(
DWORD
dib); FreeImage_GetTransparencyTable GetTransparencyTable;
typedef
DWORD
(__stdcall *FreeImage_GetBlueMask)(
DWORD
dib); FreeImage_GetBlueMask GetBlueMask;
typedef
DWORD
(__stdcall *FreeImage_GetRedMask)(
DWORD
dib); FreeImage_GetRedMask GetRedMask;
typedef
DWORD
(__stdcall *FreeImage_GetThumbnail)(
DWORD
dib); FreeImage_GetThumbnail GetThumbnail;
typedef
DWORD
(__stdcall *FreeImage_GetPalette)(
DWORD
dib); FreeImage_GetPalette GetPalette;
typedef
DWORD
(__stdcall *FreeImage_GetGreenMask)(
DWORD
dib); FreeImage_GetGreenMask GetGreenMask;
typedef
DWORD
(__stdcall *FreeImage_GetImageType)(
DWORD
dib); FreeImage_GetImageType GetImageType;
typedef
DWORD
(__stdcall *FreeImage_GetICCProfile)(
DWORD
dib); FreeImage_GetICCProfile GetICCProfile;
typedef
DWORD
(__stdcall *FreeImage_GetBackgroundColor)(
DWORD
dib); FreeImage_GetBackgroundColor GetBackgroundColor;
typedef
DWORD
(__stdcall *FreeImage_GetInfo)(
DWORD
dib); FreeImage_GetInfo GetInfo;
typedef
DWORD
(__stdcall *FreeImage_GetFormatFromFIF)(
DWORD
dib); FreeImage_GetFormatFromFIF GetFormatFromFIF;
typedef
DWORD
(__stdcall *FreeImage_GetFIFExtensionList)(
DWORD
dib); FreeImage_GetFIFExtensionList GetFIFExtensionList;
typedef
DWORD
(__stdcall *FreeImage_GetMetadataCount)(
DWORD
format,
DWORD
dib); FreeImage_GetMetadataCount GetMetadataCount;
FreeImage_Initialise Initialise;
FreeImage_GetFileTypeU LoadFileType;
FreeImage_LoadU LoadU;
DWORD
load;
FreeImage_UnLoad UnLoad;
FreeImage_DeInitialise DeInitialise;
int
main(
int
argc,
char
** argv)
{
if
(argc < 2) {
printf
(
"Usage: %s <xml file>\n"
, argv[0]);
return
0;
}
wchar_t
* PathName = charToWChar(argv[1]);
HINSTANCE
hinstLib;
BOOL
fFreeResult, fRunTimeLinkSuccess = FALSE;
DWORD
Error = NULL;
hinstLib = LoadLibrary(TEXT(
"E:\\FreeImage.dll"
));
if
(hinstLib != NULL)
{
fRunTimeLinkSuccess = TRUE;
Initialise = (FreeImage_Initialise)GetProcAddress(hinstLib, (
LPCSTR
)163);
LoadFileType = (FreeImage_GetFileTypeU)GetProcAddress(hinstLib, (
LPCSTR
)126);
LoadU = (FreeImage_LoadU)GetProcAddress(hinstLib, (
LPCSTR
)181);
UnLoad = (FreeImage_UnLoad)GetProcAddress(hinstLib, (
LPCSTR
)242);
DeInitialise = (FreeImage_DeInitialise)GetProcAddress(hinstLib, (
LPCSTR
)83);
LoadFileType = (FreeImage_GetFileTypeU)GetProcAddress(hinstLib, (
LPCSTR
)126);
GetFIFFromFilenameU = (FreeImage_GetFIFFromFilenameU)GetProcAddress(hinstLib, (
LPCSTR
)118);
GetDotsPerMeterX = (FreeImage_GetDotsPerMeterX)GetProcAddress(hinstLib, (
LPCSTR
)112);
GetDotsPerMeterY = (FreeImage_GetDotsPerMeterY)GetProcAddress(hinstLib, (
LPCSTR
)113);
GetTransparencyCount = (FreeImage_GetTransparencyCount)GetProcAddress(hinstLib, (
LPCSTR
)155);
GetTransparencyTable = (FreeImage_GetTransparencyTable)GetProcAddress(hinstLib, (
LPCSTR
)156);
GetBlueMask = (FreeImage_GetBlueMask)GetProcAddress(hinstLib, (
LPCSTR
)105);
GetRedMask = (FreeImage_GetRedMask)GetProcAddress(hinstLib, (
LPCSTR
)145);
GetGreenMask = (FreeImage_GetGreenMask)GetProcAddress(hinstLib, (
LPCSTR
)128);
GetThumbnail = (FreeImage_GetThumbnail)GetProcAddress(hinstLib, (
LPCSTR
)154);
GetPalette = (FreeImage_GetPalette)GetProcAddress(hinstLib, (
LPCSTR
)141);
GetImageType = (FreeImage_GetImageType)GetProcAddress(hinstLib, (
LPCSTR
)132);
GetICCProfile = (FreeImage_GetICCProfile)GetProcAddress(hinstLib, (
LPCSTR
)131);
GetBackgroundColor = (FreeImage_GetBackgroundColor)GetProcAddress(hinstLib, (
LPCSTR
)103);
GetInfo = (FreeImage_GetInfo)GetProcAddress(hinstLib, (
LPCSTR
)133);
GetFormatFromFIF = (FreeImage_GetFormatFromFIF)GetProcAddress(hinstLib, (
LPCSTR
)127);
GetFIFExtensionList = (FreeImage_GetFIFExtensionList)GetProcAddress(hinstLib, (
LPCSTR
)116);
GetMetadataCount = (FreeImage_GetMetadataCount)GetProcAddress(hinstLib, (
LPCSTR
)139);
(Initialise)(FALSE);
FreeImage_test(hinstLib, PathName);
(DeInitialise)();
fFreeResult = FreeLibrary(hinstLib);
}
if
(!fRunTimeLinkSuccess)
cout <<
"加载函数失败, Error: "
<< Error << endl;
return
0;
}
void
FreeImage_test(
HINSTANCE
hinstLib,
wchar_t
* pathfile)
{
DWORD
FileType = (LoadFileType)(pathfile, 0);
load = (LoadU)(FileType, pathfile, 0);
GetFIFFromFilenameU(pathfile);
GetDotsPerMeterX(load);
GetDotsPerMeterY(load);
GetTransparencyCount(load);
GetTransparencyTable(load);
GetBlueMask(load);
GetRedMask(load);
GetGreenMask(load);
GetThumbnail(load);
GetPalette(load);
GetImageType(load);
GetICCProfile(load);
GetInfo(load);
GetFormatFromFIF(load);
GetFIFExtensionList(load);
(UnLoad)(load);
}
wchar_t
* charToWChar(
const
char
* text)
{
size_t
size =
strlen
(text) + 1;
wchar_t
* wa =
new
wchar_t
[size];
mbstowcs
(wa, text, size);
return
wa;
}