DDE problems

List vmn list at vmn.com.br
Tue Feb 26 06:46:55 CST 2002


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>





More information about the wine-users mailing list