Wine Experiences
wine at baker-net.org.uk
wine at baker-net.org.uk
Sun Apr 20 16:07:59 CDT 2003
I've been experimenting with wine for a few weeks now and thought I'd write
down my experiences in case they are of use to others.
First of all I should say that I'm using Suse 8.1 (2.4.19 kernel) and have
been using LGPL wine from CVS, building it myself and using fake_windows. I
have also got a Win98 install on this machine but find I don't need to boot
it too often.
Generally it seems to do pretty well in terms of the number of programs that
work well enough to be useable, the biggest issue is in finding up to date
documentation on how to configure things as google usually comes up with out
of date instructions. e.g.:
The general view seems to be that although Wine works best with Win9x DLLs it
behaves more like NT in a lot of respects so getting it to tell programs it
is Noften helps, especially if the program tries to use VxDs on 9x. Lots of
comments suggest using "-winver nt40" to acheive this but the current way to
do it is to include a [Version] section in the wine config file that contains
"Windows" = "nt40"
Another example, the DLL load order in the config file changed recently so
that so is no longer a supported type. Wine's error message for this isn't
very informative as to where the problem is - if anyone else feels the same
way here is the code change I put in my copy
diff -r1.62 loadorder.c
458c458
< ERR("Invalid load order module-type %s, ignored\n", debugstr_w(str));
---
> ERR("Invalid load order module (%s), type (%s), ignored\n", module,
debugstr_w(str));
It also took me a while to realise that the reason all of my attempts to
access the ASPI layer were failing was because only root had access to the
generic SCSI devices - I guess there isn't much that can be done about that.
Exact Audio Copy did seem to work succesfully once it was setup so that's
another useful program that runs.
Yet another example, I've found various description on how to set up a printer
that uses gimp-print rather than going direct to CUPS but they seem to be
based on an old version. The generic postscript driver doesn't seem to handle
many advanced printer features even if they are in the PPD so that provides a
good way of controlling things like what paper type and feed options you
want. If no-one knows of a good description of how to set that up these days
I might have a go at doing it then try to document it.
One issue that I have is whether strating the debugger is really the right
action for wine_unimplemented. One program I use tries to use some
functionality in CTL3D32.DLL that isn't implemented in the builtin version.
Starting up the debugger just for it to announce that it has fallen over on a
wine_unimplemented call seems a bit of a waste of time and means that if the
debugger isn't set up properly you can't see what is wrong - do other people
think that an appropriate message to stderr followed by an exit would be more
helpful?
The next problem I've encountered also involves CTL3D32.DLL. Once I've
specified to use the native version then when a program that uses it crashes
the debugger falls over trying to load symbols for CTL3D32.DLL. It then
starts another copy of winedbg to debug the first one with. As I start using
the second winedbg to try and work out what is going on that falls over when
I try to print the values of some of the variables that are causing a problem
and dumps me into gdb. For now I've just made the assumption that no native
DLLs are likely to contain any useful debug info so told it not to load it
with the following change:
diff -r1.1 msc.c
3064c3064,3065
< dil = DEBUG_ProcessDebugDirectory( module, file_map, mpd_dbg, nDbg);
---
> dil = DIL_NOINFO; /*DEBUG_ProcessDebugDirectory( module, file_map,
> mpd_dbg, nDbg );*/
if anyone wants to look at this I'd suspect the fixme comments starting at
line 3041 in msc.c and the following stack backtrace are the place to start
looking.
Wine-dbg>where
Backtrace:
=>0 0x404c3723 (DEBUG_ProcessDebugDirectory+0x23(module=0x3d681e48,
file_map=0x40810000, dbg=0x4081b000, nDbg=0x1) [msc.c:2861] in
winedbg.exe.so) (ebp=40712ae4)
1 0x404c3b3b (DEBUG_RegisterMSCDebugInfo+0x25b(module=0x3d681e48,
hFile=0x38, _nth=0x40712ba0, nth_ofs=0x80) [msc.c:3064] in winedbg.exe.so)
(ebp=40712b3c)
2 0x404c03db (DEBUG_LoadModule32+0x1ab(name=0x40712cc8, hFile=0x38,
base=0x7ec50000) [module.c:307] in winedbg.exe.so) (ebp=40712cac)
3 0x404cb85b (.L274+0x5a [winedbg.c] in winedbg.exe.so) (ebp=40712dd4)
4 0x404cbb72 (DEBUG_MainLoop+0x52 [winedbg.c:928] in winedbg.exe.so)
(ebp=40712e48)
5 0x404cbf38 (main+0x108(argc=0x3, argv=0xbffff380) [winedbg.c:1161] in
winedbg.exe.so) (ebp=40712e80)
6 0x404b3177 (__wine_exe_main+0x37 [winedbg.exe.spec.c:544] in
winedbg.exe.so) (ebp=40712e94)
7 0x400a3a44 (start_process+0x234 [process.c:566] in libntdll.dll.so)
(ebp=40712f30)
8 0x400a7d0a (call_on_thread_stack+0x7a(func=0x400a3810) [sysdeps.c:171] in
libntdll.dll.so) (ebp=40712ff4)
9 0x400a7e70 (SYSDEPS_CallOnStack+0x14 in libntdll.dll.so) (ebp=00000000)
Wine-dbg>print dbg[0]
{Characteristics=*** Invalid address 0x4081b000 (_end+0x14a44)
, TimeDateStamp=*** Invalid address 0x4081b004 (_end+0x14a48)
, MajorVersion=*** Invalid address 0x4081b008 (_end+0x14a4c)
, MinorVersion=*** Invalid address 0x4081b00a (_end+0x14a4e)
, Type=*** Invalid address 0x4081b00c (_end+0x14a50)
, SizeOfData=*** Invalid address 0x4081b010 (_end+0x14a54)
, AddressOfRawData=*** Invalid address 0x4081b014 (_end+0x14a58)
, PointerToRawData=*** Invalid address 0x4081b018 (_end+0x14a5c)
}
Wine-dbg>print i
0
Wine-dbg>print nDbg
1
Wine-dbg>print *module
{load_addr=0x7ec50000, size=69632,
module_name="C:\WINDOWS\SYSTEM\CTL3D32.DLL", dil=DIL_DEFERRED, type=DMT_PE,
wine_dbg_cmd: Exception c0000005
If anyone is still reading I'll point out another gotcha with the latest CVS -
When building the D3D8 DLL a few OpenGL functions are called which only
appear to be in libGL.a and not libGL.so. In order to get it to link I had to
link with the static library but I'm not sure if that will cause problems if
other code is linked with the shared version. The functions affected are all
of the glMultiTexCoord?f(...) ones in device.c
Finally a couple of observations that it might not be beyond my skills to fix
if other people have the same problems. When applications try to flash the
title bar - presumably by calling FlashWindow it doesn't seem to do anything
and setting a maximum window size seems to be ignored. (This is using KDE -
whether this works could be window manager dependent.) Of course I'll need a
Windows development environment to test this, preferably one that works under
wine. I had been using cygwin under Win98 so that will probably be the first
thing I try.
More information about the wine-users
mailing list