[2/3] mscoree: Use the main HMODULE in _CorExeMain instead of loading a new exe.
Vincent Povirk
madewokherd at gmail.com
Wed May 2 16:16:58 CDT 2012
-------------- next part --------------
From 4f4fda3d1ec04993b642573173d8d9dd837ceabe Mon Sep 17 00:00:00 2001
From: Vincent Povirk <vincent at codeweavers.com>
Date: Wed, 2 May 2012 13:04:36 -0500
Subject: [PATCH 2/7] mscoree: Use the main HMODULE in _CorExeMain instead of
loading a new exe.
---
dlls/mscoree/corruntimehost.c | 20 +++++++++++++++++---
dlls/mscoree/metahost.c | 2 ++
dlls/mscoree/mscoree_private.h | 2 ++
3 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/mscoree/corruntimehost.c b/dlls/mscoree/corruntimehost.c
index 31c02ea..35815f0 100644
--- a/dlls/mscoree/corruntimehost.c
+++ b/dlls/mscoree/corruntimehost.c
@@ -829,7 +829,9 @@ __int32 WINAPI _CorExeMain(void)
int argc;
char **argv;
MonoDomain *domain;
- MonoAssembly *assembly;
+ MonoImage *image;
+ MonoImageOpenStatus status;
+ MonoAssembly *assembly=NULL;
WCHAR filename[MAX_PATH];
char *filenameA;
ICLRRuntimeInfo *info;
@@ -863,9 +865,21 @@ __int32 WINAPI _CorExeMain(void)
if (SUCCEEDED(hr))
{
- assembly = host->mono->mono_domain_assembly_open(domain, filenameA);
+ image = host->mono->mono_image_open_from_module_handle(GetModuleHandleW(NULL),
+ filenameA, 1, &status);
- exit_code = host->mono->mono_jit_exec(domain, assembly, argc, argv);
+ if (image)
+ assembly = host->mono->mono_assembly_load_from(image, filenameA, &status);
+
+ if (assembly)
+ {
+ exit_code = host->mono->mono_jit_exec(domain, assembly, argc, argv);
+ }
+ else
+ {
+ ERR("couldn't load %s, status=%d\n", debugstr_w(filename), status);
+ exit_code = -1;
+ }
RuntimeHost_DeleteDomain(host, domain);
}
diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c
index 1296e37..2c3322a 100644
--- a/dlls/mscoree/metahost.c
+++ b/dlls/mscoree/metahost.c
@@ -165,12 +165,14 @@ static HRESULT load_mono(CLRRuntimeInfo *This, loaded_mono **result)
} while (0);
LOAD_MONO_FUNCTION(mono_assembly_get_image);
+ LOAD_MONO_FUNCTION(mono_assembly_load_from);
LOAD_MONO_FUNCTION(mono_assembly_open);
LOAD_MONO_FUNCTION(mono_config_parse);
LOAD_MONO_FUNCTION(mono_class_from_mono_type);
LOAD_MONO_FUNCTION(mono_class_from_name);
LOAD_MONO_FUNCTION(mono_class_get_method_from_name);
LOAD_MONO_FUNCTION(mono_domain_assembly_open);
+ LOAD_MONO_FUNCTION(mono_image_open_from_module_handle);
LOAD_MONO_FUNCTION(mono_install_assembly_preload_hook);
LOAD_MONO_FUNCTION(mono_jit_exec);
LOAD_MONO_FUNCTION(mono_jit_init);
diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h
index 12a1e56..357914f 100644
--- a/dlls/mscoree/mscoree_private.h
+++ b/dlls/mscoree/mscoree_private.h
@@ -147,6 +147,7 @@ struct loaded_mono
BOOL is_shutdown;
MonoImage* (CDECL *mono_assembly_get_image)(MonoAssembly *assembly);
+ MonoAssembly* (CDECL *mono_assembly_load_from)(MonoImage *image, const char *fname, MonoImageOpenStatus *status);
MonoAssembly* (CDECL *mono_assembly_open)(const char *filename, MonoImageOpenStatus *status);
MonoClass* (CDECL *mono_class_from_mono_type)(MonoType *type);
MonoClass* (CDECL *mono_class_from_name)(MonoImage *image, const char* name_space, const char *name);
@@ -154,6 +155,7 @@ struct loaded_mono
void (CDECL *mono_config_parse)(const char *filename);
MonoAssembly* (CDECL *mono_domain_assembly_open) (MonoDomain *domain, const char *name);
void (CDECL *mono_free)(void *);
+ MonoImage* (CDECL *mono_image_open_from_module_handle)(HMODULE module_handle, char* fname, UINT has_entry_point, MonoImageOpenStatus* status);
void (CDECL *mono_install_assembly_preload_hook)(MonoAssemblyPreLoadFunc func, void *user_data);
int (CDECL *mono_jit_exec)(MonoDomain *domain, MonoAssembly *assembly, int argc, char *argv[]);
MonoDomain* (CDECL *mono_jit_init)(const char *file);
--
1.7.9.5
More information about the wine-patches
mailing list