winewrap: load DLLs in the wrapper
Dimitrie O. Paun
dpaun at rogers.com
Thu Oct 9 20:31:02 CDT 2003
ChangeLog
Have the wrapper load the used DLLs in case the main program
calls them from constructors (with help from Alexandre Julliard).
Index: tools/winegcc/winewrap.c
===================================================================
RCS file: /var/cvs/wine/tools/winegcc/winewrap.c,v
retrieving revision 1.6
diff -u -r1.6 winewrap.c
--- tools/winegcc/winewrap.c 19 Sep 2003 00:19:36 -0000 1.6
+++ tools/winegcc/winewrap.c 9 Oct 2003 21:46:25 -0000
@@ -175,7 +175,8 @@
"{\n"
" HINSTANCE hApp = 0, hMFC = 0, hMain = 0;\n"
" void* appMain;\n"
- " int retcode;\n"
+ " int retcode, i;\n"
+ " const char* libs[] = { %s };\n"
"\n"
" /* Then if this application is MFC based, load the MFC module */\n"
" if (mfcModule) {\n"
@@ -185,6 +186,10 @@
" hMain = hMFC;\n"
" }\n"
"\n"
+ " for (i = 0; i < sizeof(libs)/sizeof(libs[0]); i++) {\n"
+ " if (!LoadLibrary(libs[i])) error(\"Could not load %%s (%%d)\", libs[i], GetLastError());\n"
+ " }\n"
+ "\n"
" /* Load the application's module */\n"
" if (!appModule) appModule = appName;\n"
" hApp = LoadLibrary(appModule);\n"
@@ -340,8 +345,9 @@
static void create_the_wrapper(char* base_file, char* base_name, char* app_name, int gui_mode)
{
char *wrp_temp_name, *wspec_name, *wspec_c_name, *wspec_o_name;
- char *wrap_c_name, *wrap_o_name;
+ char *wrap_c_name, *wrap_o_name, *dlls = "";
strarray *wwrap_args, *wspec_args, *wcomp_args, *wlink_args;
+ int i;
wrp_temp_name = tempnam(0, "wwrp");
wspec_name = strmake("%s.spec", wrp_temp_name);
@@ -362,7 +368,9 @@
strarray_add(wwrap_args, wrap_c_name);
strarray_add(wwrap_args, NULL);
- create_file(wrap_c_name, wrapper_code, base_name, gui_mode, app_name);
+ for (i = dll_files->size - 1; i >= 0; i--)
+ dlls = strmake("\"%s\", %s", dll_files->base[i] + 2, dlls);
+ create_file(wrap_c_name, wrapper_code, base_name, gui_mode, app_name, dlls);
spawn(wwrap_args);
strarray_free(wwrap_args);
rm_temp_file(wrap_c_name);
@@ -611,7 +619,7 @@
rm_temp_file(spec_o_name);
if (create_wrapper)
- create_the_wrapper(base_file, base_name, app_name, gui_mode);
+ create_the_wrapper(base_file, base_name, app_name, gui_mode );
/* create the loader script */
create_file(base_file, app_loader_script, base_name);
--
Dimi.
More information about the wine-patches
mailing list