d2b2a921f1
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
77 lines
1.8 KiB
C
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;
|
|
}
|