[Mono-winforms-list] SWF question

Alexandre Pigolkine pigolkine@gmx.de
Wed, 12 Nov 2003 23:52:06 +0100


Hello Mark,

I think that CheckBox sample crashes due to some different problem.

IMHO, the process looks like this:
on first reference to Win32 class, loader tries to resolve class members
(static external functions also) and attempts to load winnt.dll or
"getprocaddress" of  wine_get_unix_file_name from kernel32.dll. This fails
on
Windows and you see warnings, but they do not stop the loading process.
Only a call to a missing/unresolved function will break an application (you
should see a
stack trace and exception information).
CheckBox doesn't call those functions. The functions from
libwinnt.dll.so should be called only on Linux from static Win32 constructor
to load and initialize Wine, wine_get_unix_file_name should be called only
on
Linux from FileDialog code to convert a Win32 filename to a Linux filename.

I hope that this information is correct and will be useful for you.

Alexandre Pigolkine

----- Original Message ----- 
From: "Mark Gimelfarb" <mark@dawebber.com>
To: <mono-list@lists.ximian.com>
Cc: <mono-winforms-list@lists.ximian.com>
Sent: Wednesday, November 12, 2003 6:43 PM
Subject: [Mono-winforms-list] SWF question


> Hello all!
> I have been compiling several example programs from the Wine sample page
on the
> Mono Wiki under WinXP XP1 w/ Mono 0.28 dist. One of the examples,
CheckBox,
> fails to run, although it compiles nicely. A blank window comes up widgets
get
> initialized and then it quits. The error in the console window states:
> <snip>
> ** (swf-checkbox.exe:3068): WARNING **: Failed to load function
wine_get_unix_fi
> le_name from kernel32.dll
> </snip>
> while looking at
> mcs/class/System.Windows.Forms/System.Windows.Forms/win32functions.cs,
> I've noticed that when _get_unix_file_name() gets called, it checks to see
> whether it's running under Unix by testing for the file separator for the
> target platform. This piece of code seems to do "the right thing", and I
know
> that there is a better way to do it (there is a FIXME comment above it),
but I
> think that this boolean is to blame for the reaason that
wine_get_unix_file_name
> () get called at all under Windows, when it shouldn't. I also don't
understand,
> why a checkbox would want to call such function even under Linux, but
looking
> at CheckBox.cs, I think that it gets called during Control Style inits or
> winControlProcMask calls by one of the lower-lever Win32 API functions. I
would
> love to be able to debug this issue and make a patch, but unfortunately, I
have
> not been able to either get the mono debugger working under Windoze, nor
> compile SWF libraries under VS.NET for debugging.
>
> Further on, in ctor for the Win32 class the following code exists:
> <snip>
> [DllImport ("libwinnt.dll.so", EntryPoint="PROCESS_InitWine")]
>                 extern static void PROCESS_InitWine (int argc, string []
args);
>
> [DllImport ("libwinnt.dll.so", EntryPoint="LoadLibraryA")]
>                extern static void NTDLL_LoadLibraryA (string s);
> </snip>
>
> Such declarations will of course, fail under windows and produce warnings
on
> the console.
>
> I would love to hear whether I'm totally wrong, or whether this makes any
> sense. If it does, and I can help fix this, I would love to be able to
help.
>
> Regards,
>         Mark.
> _______________________________________________
> Mono-winforms-list maillist  -  Mono-winforms-list@lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-winforms-list
>