FreeRDP/winpr/libwinpr/library/test/TestLibraryLoadLibrary.c
Norbert Federa d2b2a921f1 winpr/library: fix win32 test and some cleanup
On Windows we seem to have to load the TestLibrary[AB] test libraries
from in same folder the test executable runs.

Also removed the empty RemoveDllDirectory, SetDefaultDllDirectories,
AddDllDirectory tests and the redundant FreeLibrary test.

TestLibrary now works and succeeds on Win32.

sadasd
2016-05-27 14:34:41 +02:00

77 lines
1.8 KiB
C

#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/path.h>
#include <winpr/tchar.h>
#include <winpr/windows.h>
#include <winpr/library.h>
int TestLibraryLoadLibrary(int argc, char* argv[])
{
HINSTANCE library;
LPCTSTR SharedLibraryExtension;
TCHAR LibraryPath[PATHCCH_MAX_CCH];
#ifndef _WIN32
char* str;
int length;
LPTSTR BasePath;
str = argv[1];
#ifdef UNICODE
length = MultiByteToWideChar(CP_UTF8, 0, str, strlen(str), NULL, 0);
BasePath = (WCHAR*) malloc((length + 1) * sizeof(WCHAR));
if (!BasePath)
{
_tprintf(_T("Memory allocation failed\n"));
return -1;
}
MultiByteToWideChar(CP_UTF8, 0, str, length, (LPWSTR) BasePath, length * sizeof(WCHAR));
BasePath[length] = 0;
#else
BasePath = _strdup(str);
if (!BasePath)
{
printf("Memory allocation failed");
return -1;
}
length = strlen(BasePath);
#endif
CopyMemory(LibraryPath, BasePath, length * sizeof(TCHAR));
LibraryPath[length] = 0;
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* subdirectory */
#else /* _WIN32 */
/* On Windows the test libraries are in same folder as the test executable */
GetModuleFileName(NULL, LibraryPath, PATHCCH_MAX_CCH);
PathRemoveFileSpec(LibraryPath);
#endif
NativePathCchAppend(LibraryPath, PATHCCH_MAX_CCH, _T("TestLibraryA")); /* file name without extension */
SharedLibraryExtension = PathGetSharedLibraryExtension(PATH_SHARED_LIB_EXT_WITH_DOT);
NativePathCchAddExtension(LibraryPath, PATHCCH_MAX_CCH, SharedLibraryExtension); /* add shared library extension */
_tprintf(_T("Loading Library: %s\n"), LibraryPath);
library = LoadLibrary(LibraryPath);
if (!library)
{
_tprintf(_T("LoadLibrary failure\n"));
return -1;
}
if (!FreeLibrary(library))
{
_tprintf(_T("FreeLibrary failure\n"));
return -1;
}
return 0;
}