1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-15 15:53:55 +00:00

Added ability to specify flags for CreateNativeProxy on Windows

This commit is contained in:
Bryan Roe
2020-12-01 02:51:35 -08:00
parent c9048ee268
commit db9c020fa5

View File

@@ -1494,7 +1494,19 @@ duk_ret_t ILibDuktape_GenericMarshal_CreateNativeProxy(duk_context *ctx)
#ifdef WIN32
if (libName != NULL)
{
module = (void*)LoadLibraryA((LPCSTR)libName);
DWORD flags = 0;
if (duk_is_object(ctx, 1) && (flags=(DWORD)Duktape_GetIntPropertyValue(ctx, 1, "flags", 0)) != 0)
{
module = (void*)LoadLibraryExA((LPCSTR)libName, NULL, flags);
if (module == NULL && GetLastError() == ERROR_INVALID_PARAMETER)
{
return(ILibDuktape_Error(ctx, "Unsupported Flag value"));
}
}
else
{
module = (void*)LoadLibraryA((LPCSTR)libName);
}
}
else
{
@@ -2154,6 +2166,12 @@ void ILibDuktape_GenericMarshal_Push(duk_context *ctx, void *chain)
ILibDuktape_CreateInstanceMethod(ctx, "ObjectToPtr", ILibDuktape_GenericMarshal_ObjectToPtr, 1);
ILibDuktape_CreateInstanceMethod(ctx, "GetCurrentThread", ILibDuktape_GenericMarshal_GetCurrentThread, 0);
#ifdef WIN32
duk_push_object(ctx);
duk_push_uint(ctx, LOAD_LIBRARY_SEARCH_SYSTEM32); duk_put_prop_string(ctx, -2, "SYSTEM32");
ILibDuktape_CreateReadonlyProperty(ctx, "FLAGS");
#endif
ILibDuktape_CreateInstanceMethodWithIntProperty(ctx, "_VarSize", 4, "CreateInteger", ILibDuktape_GenericMarshal_CreateVariableEx, 0);
ILibDuktape_CreateInstanceMethodWithIntProperty(ctx, "_VarSize", ((int)sizeof(void*)), "CreatePointer", ILibDuktape_GenericMarshal_CreateVariableEx, DUK_VARARGS);
ILibDuktape_CreateInstanceMethodWithIntProperty(ctx, "_VarSize", 2, "CreateShort", ILibDuktape_GenericMarshal_CreateVariableEx, 0);