Hi!
I started using wine (wine-20020122 compiled from source tarball) a couple
of weeks ago to run a store-point-of-sale application.
The idea is to port this windows application to linux. Before porting, we
decided to check if the app could be emulated on linux with wine or
recompiled with winelib.
This is also necessary to run proprietary windows DLLs from third parties
such as credit card companies that bind the application
to specific hardware.
The software uses a lot of external hardware such as printers, barcode
scanners, special keyboards etc.
These hws usually communicate through the serial port.
Another important feature of the software is the use of DDE - Dynamic Data
Exchange from the windows API.
The application is broken into at least two executables that communicate
through DDE.
The http://www.winehq.com/News/status.html states that the implementation
of the serial/parallel port
is 90% complete but that DDE is still being implemented by Eric Pouech and
not functional.
After reviewing the manuals and spending a few days on trial runs, I
decided to try and bring in
the native DDEML.DLL and see if the exe?s would communicate.
QUESTION: Should this native windows library work under wine, has anybody
tried this?
When I tried running the software with the native DDE engine (from Win98),
I get DDE errors and a warning
saying that DDE is not functional yet. This is expected as reported by the
status.html page.
When I tried running the software with a setup that only the DDEML.DLL was
native, the
program crashed with an exception. I tried running the program with several
debug channels
but couldn?t detect the problem. The only thing learned was that the
program seemed to be crashing
inside USER.DLL builtin code. I then tried several different native/builtin
setups using mainly
the following DLLs:
Native DLLs
DDEML.DLL
OLE32.DLL
COMCTL*.DLL
COMDLG*.DLL
SHELL.DLL
SHELL32.DLL
I even tried bringing in USER and USER32.
Some of these setups were documented not to work and didn?t. Everytime I
got a setup that seemed
to work, the software would crash with basically an exception or page fault.
I then decided to use winedbg.
I was able to get a stack trace of the software at the time of the exception.
It is at the end of this email.
I also put a complete run of
winedbg --debugmsg +msg 'c:\sw\store.exe'
in http://admin.vmn.com.br/wine/out.txt
From the trace it seemed that USER builtin in code was not yet finished
and handling correctly DDE
messages or had a messaging bug related to DDE or not. I read the functions
in c code from the
trace and couldn?t see any obvious problems. They seemed complete and finished.
QUESTION: Is the builtin USER.DLL complete?
QUESTION: Should it interact correctly with DDEML.DLL? If DDEML.DLL and
USER.DLL were
communicating through COM then they should interact correctly but since DDE
is a protocol
dating back to win3.1, probably older than OLE and COM, maybe they don?t.
I have thought of reworking the original software to use SOCKETS but this
is quite a lot of
work.
I am new to wine so I may be missing something obvious.
Thanks in advance for any help.
Miguel Feitosa
TRACE
First chance exception: page fault on read access to 0xc032090d in 32-bit
code (0x400a47d6).
In 32-bit mode.
Register dump:
CS:0023 SS:002b DS:002b ES:002b FS:0277 GS:0000
EIP:400a47d6 ESP:40ca69ac EBP:40ca69b0 EFLAGS:00010202( R- 00 I - - 1 )
EAX:c032090f EBX:40100ef8 ECX:000003e7 EDX:c032090d
ESI:c032090f EDI:40ca6a10
Stack dump:
0x40ca69ac (_end+0x237d58): 406c1c84 40ca69c8 406266c6 c032090f
0x40ca69bc (_end+0x237d68): 406c1c84 080745a8 40ca6b70 40ca6a84
0x40ca69cc (_end+0x237d78): 4062f205 000003e7 c032090f 40ca6a10
0x40ca69dc (_end+0x237d88): 40ca6a14 406c1c84 080745a8 40ca6b70
0x40ca69ec (_end+0x237d98): 00000000 00000000 00000000 406911ae
0x40ca69fc (_end+0x237da8): 406c1c84 00010021 00000000 00000000
0x40ca6a0c (_end+0x237db8):
004e: sel=0277 base=40cb7000 limit=00000fff 32-bit rw-
Backtrace:
=>0 0x400a47d6 (GlobalLock+0x1a(hmem=0xc032090f) [global.c:1090] in
libntdll.so) (ebp=40ca69b0)
1 0x406266c6 (UnpackDDElParam+0x46(msg=0x3e7, lParam=0xc032090f,
uiLo=0x40ca6a10, uiHi=0x40ca6a14) [misc.c:130] in libuser32.so) (ebp=40ca69c8)
2 0x4062f205 (post_dde_message+0x35(dest_tid=0x80745a8, data=0x40ca6b2c,
info=0x40ca6b70, data=0x40ca6b2c, data=0x40ca6b2c, data=0x40ca6b2c)
[message.c:1142] in libuser32.so) (ebp=40ca6a84)
3 0x4062ff94 (put_message_in_queue+0xc8(dest_tid=0x80745a8,
info=0x40ca6b70, reply_size=0x0) [message.c:1587] in libuser32.so)
(ebp=40ca6b50)
4 0x40630b0e (PostMessageW+0xba(hwnd=0x10029, msg=0x3e7, wparam=0x27,
lparam=0xc032090f) [message.c:1995] in libuser32.so) (ebp=40ca6b94)
5 0x4063173a (PostMessage16+0x66(hwnd16=0x29, msg=0x3e7, wparam=0x27,
lparam=0xc032090f) [msg16.c:89] in libuser32.so) (ebp=40ca6bc4)
6 0x4061f4e9 (USER_CallFrom16_p_word_wwwl+0x29(proc=0x406316d4,
args=0x403b613e) [user.spec.c:1052] in libuser32.so) (ebp=40ca6be0)
7 0x4008f14a (__wine_call_from_16_word+0x8e [relay16.s] in libntdll.so)
(ebp=40ca6c10)
8 0x03af:0x5a71 (bp=a5ae)
9 0x03af:0x38e8 (bp=a5cc)
10 0x03af:0x3617 (bp=a5f0)
11 0x03af:0x150a (bp=a618)
12 0x033f:0x1dec (bp=a640, far call assumed)
13 0x033f:0x1f1f (bp=a668)
14 0x028f:0x0c86 (bp=a904)
15 0x0287:0x00e0 (bp=0000)
0x400a47d6 (GlobalLock+0x1a [global.c:1090] in libntdll.so): cmpw
$0x5342,0xfffffffe(%eax)
1090 if(pintern->Magic==MAGIC_GLOBAL_USED)
Wine-dbg>First chance exception: page fault on read access to 0xc032090d in
32-bit code (0x400a47d6).
Register dump:
CS:0023 SS:002b DS:002b ES:002b FS:0277 GS:0000
EIP:400a47d6 ESP:40ca69ac EBP:40ca69b0 EFLAGS:00010202( R- 00 I - - 1 )
EAX:c032090f EBX:40100ef8 ECX:000003e7 EDX:c032090d
ESI:c032090f EDI:40ca6a10
Stack dump:
0x40ca69ac (_end+0x237d58): 406c1c84 40ca69c8 406266c6 c032090f
0x40ca69bc (_end+0x237d68): 406c1c84 080745a8 40ca6b70 40ca6a84
0x40ca69cc (_end+0x237d78): 4062f205 000003e7 c032090f 40ca6a10
0x40ca69dc (_end+0x237d88): 40ca6a14 406c1c84 080745a8 40ca6b70
0x40ca69ec (_end+0x237d98): 00000000 00000000 00000000 406911ae
0x40ca69fc (_end+0x237da8): 406c1c84 00010021 00000000 00000000
0x40ca6a0c (_end+0x237db8):
004e: sel=0277 base=40cb7000 limit=00000fff 32-bit rw-
Backtrace:
=>0 0x400a47d6 (GlobalLock+0x1a(hmem=0xc032090f) [global.c:1090] in
libntdll.so) (ebp=40ca69b0)
1 0x406266c6 (UnpackDDElParam+0x46(msg=0x3e7, lParam=0xc032090f,
uiLo=0x40ca6a10, uiHi=0x40ca6a14) [misc.c:130] in libuser32.so) (ebp=40ca69c8)
2 0x4062f205 (post_dde_message+0x35(dest_tid=0x80745a8, data=0x40ca6b2c,
info=0x40ca6b70, data=0x40ca6b2c, data=0x40ca6b2c, data=0x40ca6b2c)
[message.c:1142] in libuser32.so) (ebp=40ca6a84)
3 0x4062ff94 (put_message_in_queue+0xc8(dest_tid=0x80745a8,
info=0x40ca6b70, reply_size=0x0) [message.c:1587] in libuser32.so)
(ebp=40ca6b50)
4 0x40630b0e (PostMessageW+0xba(hwnd=0x10029, msg=0x3e7, wparam=0x27,
lparam=0xc032090f) [message.c:1995] in libuser32.so) (ebp=40ca6b94)
5 0x4063173a (PostMessage16+0x66(hwnd16=0x29, msg=0x3e7, wparam=0x27,
lparam=0xc032090f) [msg16.c:89] in libuser32.so) (ebp=40ca6bc4)
6 0x4061f4e9 (USER_CallFrom16_p_word_wwwl+0x29(proc=0x406316d4,
args=0x403b613e) [user.spec.c:1052] in libuser32.so) (ebp=40ca6be0)
7 0x4008f14a (__wine_call_from_16_word+0x8e [relay16.s] in libntdll.so)
(ebp=40ca6c10)
8 0x03af:0x5a71 (bp=a5ae)
9 0x03af:0x38e8 (bp=a5cc)
10 0x03af:0x3617 (bp=a5f0)
11 0x03af:0x150a (bp=a618)
12 0x033f:0x1dec (bp=a640, far call assumed)
13 0x033f:0x1f1f (bp=a668)
14 0x028f:0x0c86 (bp=a904)
15 0x0287:0x00e0 (bp=0000)
0x400a47d6 (GlobalLock+0x1a [global.c:1090] in libntdll.so): cmpw
$0x5342,0xfffffffe(%eax)
1090 if(pintern->Magic==MAGIC_GLOBAL_USED)
Wine-dbg>First chance exception: page fault on read access to 0xc032090d in
32-bit code (0x400a47d6).
Register dump:
CS:0023 SS:002b DS:002b ES:002b FS:0277 GS:0000
EIP:400a47d6 ESP:40ca69ac EBP:40ca69b0 EFLAGS:00010202( R- 00 I - - 1 )
EAX:c032090f EBX:40100ef8 ECX:000003e7 EDX:c032090d
ESI:c032090f EDI:40ca6a10
Stack dump:
0x40ca69ac (_end+0x237d58): 406c1c84 40ca69c8 406266c6 c032090f
0x40ca69bc (_end+0x237d68): 406c1c84 080745a8 40ca6b70 40ca6a84
0x40ca69cc (_end+0x237d78): 4062f205 000003e7 c032090f 40ca6a10
0x40ca69dc (_end+0x237d88): 40ca6a14 406c1c84 080745a8 40ca6b70
0x40ca69ec (_end+0x237d98): 00000000 00000000 00000000 406911ae
0x40ca69fc (_end+0x237da8): 406c1c84 00010021 00000000 00000000
0x40ca6a0c (_end+0x237db8):
004e: sel=0277 base=40cb7000 limit=00000fff 32-bit rw-
Backtrace:
=>0 0x400a47d6 (GlobalLock+0x1a(hmem=0xc032090f) [global.c:1090] in
libntdll.so) (ebp=40ca69b0)
1 0x406266c6 (UnpackDDElParam+0x46(msg=0x3e7, lParam=0xc032090f,
uiLo=0x40ca6a10, uiHi=0x40ca6a14) [misc.c:130] in libuser32.so) (ebp=40ca69c8)
2 0x4062f205 (post_dde_message+0x35(dest_tid=0x80745a8, data=0x40ca6b2c,
info=0x40ca6b70, data=0x40ca6b2c, data=0x40ca6b2c, data=0x40ca6b2c)
[message.c:1142] in libuser32.so) (ebp=40ca6a84)
3 0x4062ff94 (put_message_in_queue+0xc8(dest_tid=0x80745a8,
info=0x40ca6b70, reply_size=0x0) [message.c:1587] in libuser32.so)
(ebp=40ca6b50)
4 0x40630b0e (PostMessageW+0xba(hwnd=0x10029, msg=0x3e7, wparam=0x27,
lparam=0xc032090f) [message.c:1995] in libuser32.so) (ebp=40ca6b94)
5 0x4063173a (PostMessage16+0x66(hwnd16=0x29, msg=0x3e7, wparam=0x27,
lparam=0xc032090f) [msg16.c:89] in libuser32.so) (ebp=40ca6bc4)
6 0x4061f4e9 (USER_CallFrom16_p_word_wwwl+0x29(proc=0x406316d4,
args=0x403b613e) [user.spec.c:1052] in libuser32.so) (ebp=40ca6be0)
7 0x4008f14a (__wine_call_from_16_word+0x8e [relay16.s] in libntdll.so)
(ebp=40ca6c10)
8 0x03af:0x5a71 (bp=a5ae)
9 0x03af:0x38e8 (bp=a5cc)
10 0x03af:0x3617 (bp=a5f0)
11 0x03af:0x150a (bp=a618)
12 0x033f:0x1dec (bp=a640, far call assumed)
13 0x033f:0x1f1f (bp=a668)
14 0x028f:0x0c86 (bp=a904)
15 0x0287:0x00e0 (bp=0000)
0x400a47d6 (GlobalLock+0x1a [global.c:1090] in libntdll.so): cmpw
$0x5342,0xfffffffe(%eax)
1090 if(pintern->Magic==MAGIC_GLOBAL_USED)
Wine-dbg>130 params = GlobalLock(hMem);
Wine-dbg>1142 if (!UnpackDDElParam( info->msg, info->lparam,
&uiLo,
&uiHi ))
Wine-dbg>1587 return post_dde_message( dest_tid, &data, info );
Wine-dbg>1995 return put_message_in_queue( dest_tid, &info, NULL );
Wine-dbg>89 return PostMessageW( hwnd, msg32, wparam32, lparam );
Wine-dbg>1052 return proc(
Wine-dbg>