load_dll problem

Dimitrie O. Paun dpaun at rogers.com
Wed May 14 10:41:59 CDT 2003


Folks,

I am trying to run some Winelib apps built with winegcc, and
they don't work. winegcc/winewrap do the wrapper idea to avoid
initialization problems: basically the main app is built as a
.dll which is loaded with LoadLibrary by a small loader. Well,
this DLL is not found, and the app doesn't load.

I think the problem is in load_dll(), in dlls/ntdll/loader.c
line 887:

    if (!libdir || allocated_libdir)
        found = SearchPathA(NULL, libname, ".dll", MAX_PATH, filename, NULL);
    else
        found = DIR_SearchAlternatePath(libdir, libname, ".dll", MAX_PATH, filename, NULL);

As SearchPathA doesn't seem to know that it also needs to
look for the .so version of the DLL.

Here is what happens:

1. Directory contents (simplified)

[dimi at dimi dialogs]$ ls
CVS          dialogs.def     dialogs.h      dialogs.pro
descrip.mms  dialogs.dll.so  dialogs.ico    dialogs.rc
dialogs      dialogs.dsp     dialogsM5.xml  dialogs.rcO
dialogs.cpp  dialogs.exe.so  dialogs.o      dialogs_resources.o

'dialogs' is a small bash script which loads 'dialogs.exe.so' which
does a simple LoadLibrary('dialogs.dll') to load 'dialogs.dll.so'
which is the actual application.

2. Here is the relevant part of:
	./dialogs --debugmsg +dosfs,+file,+module,+loaddll
   with a 'grep -v trace:dosfs:DOSFS_ReadDir' for brevity.

trace:module:LdrGetDllHandle 0 0 L"user32.dll" -> 0x40980000
trace:module:LdrGetDllHandle 0 0 L"user32.dll" -> 0x40980000
trace:module:LdrGetDllHandle 0 0 L"user32.dll" -> 0x40980000
trace:module:LdrGetDllHandle 0 0 L"user32.dll" -> 0x40980000
trace:module:GetModuleFileNameW L"F:\\dev\\wine\\wxWindows\\samples\\dialogs\\dialogs.exe"
trace:dosfs:DOSFS_GetFullName L"F:\\dev\\wine\\wxWindows\\samples\\dialogs\\dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /home/dimi,L"dev\\wine\\wxWindows\\samples\\dialogs\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dev\\wine\\wxWindows\\samples\\dialogs\\dialogs.dll", 0x408a1af0)
trace:dosfs:DOSFS_OpenDir "/home/dimi"
trace:dosfs:DOSFS_FindUnixName (/home/dimi,L"dev\\wine\\wxWindows\\samples\\dialogs\\dialogs.dll") -> L"dev" (L"DEV")
trace:dosfs:DOSFS_FindUnixName /home/dimi/dev,L"wine\\wxWindows\\samples\\dialogs\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"wine\\wxWindows\\samples\\dialogs\\dialogs.dll", 0x408a1af0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/dev"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/dev,L"wine\\wxWindows\\samples\\dialogs\\dialogs.dll") -> L"wine" (L"WINE")
trace:dosfs:DOSFS_FindUnixName /home/dimi/dev/wine,L"wxWindows\\samples\\dialogs\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"wxWindows\\samples\\dialogs\\dialogs.dll", 0x408a1af0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/dev/wine"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/dev/wine,L"wxWindows\\samples\\dialogs\\dialogs.dll") -> L"wxWindows" (L"WXWI~MP0")
trace:dosfs:DOSFS_FindUnixName /home/dimi/dev/wine/wxWindows,L"samples\\dialogs\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"samples\\dialogs\\dialogs.dll", 0x408a1af0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/dev/wine/wxWindows"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/dev/wine/wxWindows,L"samples\\dialogs\\dialogs.dll") -> L"samples" (L"SAMPLES")
trace:dosfs:DOSFS_FindUnixName /home/dimi/dev/wine/wxWindows/samples,L"dialogs\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs\\dialogs.dll", 0x408a1af0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/dev/wine/wxWindows/samples"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/dev/wine/wxWindows/samples,L"dialogs\\dialogs.dll") -> L"dialogs" (L"DIALOGS")
trace:dosfs:DOSFS_FindUnixName /home/dimi/dev/wine/wxWindows/samples/dialogs,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1af0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/dev/wine/wxWindows/samples/dialogs"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi/dev/wine/wxWindows/samples/dialogs'
trace:dosfs:DOSFS_GetFullName L"dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /home/dimi/dev/wine/wxWindows/samples/dialogs,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1da8)
trace:dosfs:DOSFS_OpenDir "/home/dimi/dev/wine/wxWindows/samples/dialogs"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi/dev/wine/wxWindows/samples/dialogs'
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1dd0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System'
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows/Windows,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1dd0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows/Windows"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi/cxoffice/support/dotwine/fake_windows/Windows'
trace:module:GetModuleFileNameW L"F:\\dev\\wine\\wxWindows\\samples\\dialogs\\dialogs.exe"
trace:dosfs:DOSFS_GetFullName L"c:\\windows\\dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows,L"windows\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"windows\\dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/cxoffice/support/dotwine/fake_windows,L"windows\\dialogs.dll") -> L"Windows" (L"WINDOWS")
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows/Windows,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows/Windows"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi/cxoffice/support/dotwine/fake_windows/Windows'
trace:dosfs:DOSFS_GetFullName L"c:\\windows\\system\\dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows,L"windows\\system\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"windows\\system\\dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/cxoffice/support/dotwine/fake_windows,L"windows\\system\\dialogs.dll") -> L"Windows" (L"WINDOWS")
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows/Windows,L"system\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"system\\dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows/Windows"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/cxoffice/support/dotwine/fake_windows/Windows,L"system\\dialogs.dll") -> L"System" (L"SYSTEM")
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System'
trace:dosfs:DOSFS_GetFullName L"e:\\\\dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /tmp,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/tmp"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/tmp'
trace:dosfs:DOSFS_GetFullName L"e:\\test\\dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /tmp,L"test\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"test\\dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/tmp"
warn:dosfs:DOSFS_FindUnixName L"test\\dialogs.dll" not found in '/tmp'
trace:dosfs:DOSFS_GetFullName L"f:\\\\dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /home/dimi,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1d44)
trace:dosfs:DOSFS_OpenDir "/home/dimi"
trace:dosfs:DOSFS_OpenDir "/home/dimi"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi'
trace:module:MODULE_GetLoadOrder looking for C:\WINDOWS\SYSTEM\dialogs.dll
trace:module:GetModuleFileNameW L"F:\\dev\\wine\\wxWindows\\samples\\dialogs\\dialogs.exe"
trace:module:open_app_key searching 'dialogs' in AppDefaults\dialogs.exe\DllOverrides
trace:module:MODULE_GetLoadOrder got standard wildcard "b,n" for "dialogs.dll"
trace:module:load_dll Trying built-in 'C:\WINDOWS\SYSTEM\dialogs.dll'
warn:module:BUILTIN32_dlopen cannot open .so lib for builtin dialogs.dll: /usr/local/lib/wine/dialogs.dll.so: cannot open shared object file: No such file or directory
trace:module:load_dll Trying native dll 'C:\WINDOWS\SYSTEM\dialogs.dll'
trace:file:CreateFileW L"C:\\WINDOWS\\SYSTEM\\dialogs.dll" GENERIC_READ FILE_SHARE_READ OPEN_EXISTING  attributes 0x0
trace:dosfs:DOSFS_GetFullName L"C:\\WINDOWS\\SYSTEM\\dialogs.dll" (last=1)
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows,L"WINDOWS\\SYSTEM\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"WINDOWS\\SYSTEM\\dialogs.dll", 0x408a1fe0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/cxoffice/support/dotwine/fake_windows,L"WINDOWS\\SYSTEM\\dialogs.dll") -> L"Windows" (L"WINDOWS")
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows/Windows,L"SYSTEM\\dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"SYSTEM\\dialogs.dll", 0x408a1fe0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows/Windows"
trace:dosfs:DOSFS_FindUnixName (/home/dimi/cxoffice/support/dotwine/fake_windows/Windows,L"SYSTEM\\dialogs.dll") -> L"System" (L"SYSTEM")
trace:dosfs:DOSFS_FindUnixName /home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System,L"dialogs.dll"
trace:dosfs:DOSFS_ToDosFCBFormat (L"dialogs.dll", 0x408a1fe0)
trace:dosfs:DOSFS_OpenDir "/home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System"
warn:dosfs:DOSFS_FindUnixName L"dialogs.dll" not found in '/home/dimi/cxoffice/support/dotwine/fake_windows/Windows/System'
warn:file:CreateFileW Unable to get full filename from L"C:\\WINDOWS\\SYSTEM\\dialogs.dll" (GLE 2)
warn:module:load_dll Failed to load module 'C:\WINDOWS\SYSTEM\dialogs.dll'; status=-1073741809
trace:module:LdrGetDllHandle 0 0 L"user32.dll" -> 0x40980000


-- 
Dimi.




More information about the wine-devel mailing list