FYI ---------- Forwarded message ---------- From: Steven Woody <narkewoody@xxxxxxxxx> Date: Nov 17, 2006 10:17 AM Subject: Re: TrackPopupMenuEx not fully implemented To: "L. Rahyen" <research@xxxxxxxxxx> On 11/16/06, L. Rahyen <research@xxxxxxxxxx> wrote:
On Thursday November 16 2006 05:56, you wrote: > i've read the wine doc got a confusion unclear, some part of the doc > say that c:\windows\system used to place fake Dlls which are only for > fooling some applications of file existence checking, native Dlls will > rather be used when the application really call the functions > associated with these fake Dlls. Personally I don't recommend you put somewhere fake dlls. I even don't know real-world applications that really check for existence of files without checking content. Typically program wants to load dll. By default builtin dll is loaded. If there is no builtin dll, Wine searches native ones in system or system32 directories (also it searches current directory and other that in your path for searching dlls). In simple words. You may safely copy all your dlls from Windows to Wine directories. This will not harm anything. But Windows have dlls that Wine havn't yet builtin like MFC (many applications need different versions of it) and others. If you want to copy every dll from Windows to Wine, good idea to copy them to system if Windows have them in system, and to system32 directory otherwise (and this is right for most dlls). Theoretically you can copy dlls to everywhere when Wine tries to find them, including current directory. But in practice some stupid applications tries to load dlls from typical Windows location instead to use standard API for load them. That means if dll locates in other place that is not typical for Windows, application will fail. This rare case, most application use legal API. But anyway I recommend you to put dlls in directories where Windows have them. You can edit registry to set dll overrides or use winecfg. Using winecfg is trivial so I tell you how edit registry - this is faster if you have experience. Go in console and execute: nano ~/.wine/user.reg This opens my favorite console text editor. If you don't like console editors you may use GUI-editors like kate, kwrite, kedit or anything you like. If you use nano like me them press Ctrl+W (for GUI-editors Ctrl+F) and type "overr" (without quotes) and then enter. Now you see your dlls overrides. If you nothing found then you may want to paste "[Software\\Wine\\DllOverrides] 1156473935" somewhere you like and press enter (so now cursor is on new line). Default setting for all dlls is "builtin,native" - that means if Wine have builtin it will use it and ignore native dlls if you put them to system or system32 directory. If there is no builtin it will try to find native one. This work well for most cases. But sometimes you want override this. For example I don't like builin comctl32 because it incorectly works if you use non-default color theme with Wine applications. So I type "comctl32"="native,builtin" - (WITH quotes - this is important) that means I want to load native dll if it exists and use builtin only if native one isn't found. If you followed this instructions you now have something like this within user.reg: WINE REGISTRY Version 2 ;; All keys relative to \\User\\S-1-5-4 [Software\\Wine\\DllOverrides] 1156473935 "comctl32"="native,builtin" [Control Panel\\Colors] 1156502551 Other strings shown for clarity. Now if you put comctl32.dll from Windows to wine system or system32 directory it will load it instead of builtin one. Also to be sure that dlls searched in directories where you placed them open ~/.wine/system.reg and search for "[System\\CurrentControlSet\\Control\\Session Manager\\Environment]" (without quotes). You must found below it something like this: "ComSpec"="c:\\windows\\system32\\wcmd.exe" "NUMBER_OF_PROCESSORS"="1" "OS"="Windows_NT" "PATH"="c:\\windows\\system32;c:\\windows" You want to change "PATH" (with quotes). For example change it like this: "PATH"="c:\\windows\\system32;c:\\windows;c:\\windows\\system" Now Wine will search current directory, C:\windows\system32, C: \windows\system and C:\windows for dlls and other files. This is recommended settings. > and, when will the wine really load them? Good question. Run following command: WINEDEBUG="+loaddll" wine Program.exe Where Program.exe your program. It will show now what dlls it use with program: builtin ones or native. Note that some dlls always builtin no mean what dll overrids you set. This is normal for ntdll, kernel32, user32 because native ones cannot be used anyway. Using this command you may easy see what dlls application uses and make sure that native dlls is used where you want. Hope my instructions are helpful to you...
Dear Rahyen thank you. i now totally understand and i am happy i've also learned about how to bypass winecfg GUI. please ignore another mail i post hours ago, your instruction has already answered the question. -- woody then sun rose thinly from the sea and the old man could see the other boats, low on the water and well in toward the shore, spread out across the current. -- woody then sun rose thinly from the sea and the old man could see the other boats, low on the water and well in toward the shore, spread out across the current. _______________________________________________ wine-users mailing list wine-users@xxxxxxxxxx http://www.winehq.org/mailman/listinfo/wine-users